home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / 4000.lha / 4000test.s
Text File  |  1995-09-18  |  149KB  |  10,334 lines

  1.  
  2.  
  3. FILTER    macro
  4. ;    bchg    #1,$bfe001
  5.     endm
  6.  
  7. BLACK    macro
  8.     move.w    #0,$dff180
  9.     endm
  10.  
  11. RED    macro
  12.     move.w    #$f00,$dff180
  13.     endm
  14.  
  15. GREEN    macro
  16.     move.w    #$0f0,$dff180
  17.     endm
  18.  
  19. BLUE    macro
  20.     move.w    #$f,$dff180
  21.     endm
  22.  
  23.  
  24.     opt    P=68020
  25.  
  26.     include include:hardware/intbits.i
  27.  
  28. CD32VER equ 0
  29.  
  30. maxscrdiv EQU 8
  31. max3ddiv EQU 5
  32. playerheight EQU 12*1024
  33. playercrouched EQU 8*1024
  34. scrheight EQU 80
  35.  
  36. ; k/j/m
  37.  
  38. ; 4/8
  39. ; s/x
  40. ; b/n
  41.  
  42. midoffset EQU 104*4*40
  43.  
  44.  
  45.  SECTION Scrn,CODE
  46. OpenLib       equ -552
  47. CloseLib      equ -414
  48.  
  49. INTREQ        equ    $09C
  50. INTENA        equ    $09A
  51. INTENAR    equ    $01C
  52. DMACON        equ    $096
  53.  
  54. SERPER        equ    $032
  55. SERDATR    equ    $018
  56. SERDAT        equ    $030
  57. vhposr        equ $006    
  58. vhposrl    equ $007 
  59.  
  60. bltcon0    equ $40 
  61. bltcon1    equ $42
  62. bltcpt        equ $48
  63. bltbpt        equ $4c
  64. bltapt        equ $50
  65. spr0ctl    equ $142
  66. spr1ctl    equ $14a
  67. spr2ctl    equ $152
  68. spr3ctl    equ $15a
  69. spr4ctl    equ $162
  70. spr5ctl    equ $16a
  71. spr6ctl    equ $172
  72. spr7ctl    equ $17a
  73. spr0pos    equ $140
  74. spr1pos    equ $148
  75. spr2pos    equ $150
  76. spr3pos    equ $158
  77. spr4pos    equ $160
  78. spr5pos    equ $168
  79. spr6pos    equ $170
  80. spr7pos    equ $178
  81. bltdpt         equ $54
  82. bltafwm    equ $44
  83. bltalwm    equ $46
  84. bltsize         equ $58
  85. bltcmod         equ $60
  86. bltbmod         equ $62
  87. bltamod         equ $64
  88. bltdmod         equ $66
  89. diwstart        equ $8e         ; Screen hardware registers.
  90. diwstop         equ $90
  91. ddfstart        equ $92
  92. ddfstop         equ $94
  93. bplcon0         equ $100
  94. bplcon1         equ $102
  95. col0            equ $180
  96. col1            equ $182
  97. col2        equ $184
  98. col3        equ $186
  99. col4        equ $188
  100. col5        equ $18a
  101. col6        equ $18c
  102. col7        equ $18e
  103. col8            equ $190
  104. col9            equ $192
  105. col10           equ $194
  106. col11           equ $196
  107. col12           equ $198
  108. col13           equ $19a
  109. dmacon        equ $96
  110. dmaconr        equ $002
  111. intenar        equ $01c
  112. intena        equ $09a
  113. intreq        equ $09c
  114. intreqr        equ $01e
  115. intreqrl    equ $01f
  116. bpl1pth         equ $e0
  117. bpl1ptl         equ $e2
  118. bpl2pth        equ $e4
  119. bpl2ptl        equ $e6
  120. bpl3pth        equ $e8
  121. bpl3ptl        equ $ea
  122. bpl4pth        equ $ec
  123. bpl4ptl        equ $ee
  124. bpl5pth        equ $f0
  125. bpl5ptl        equ $f2
  126. bpl6pth        equ $f4
  127. bpl6ptl        equ $f6
  128. bpl7pth        equ $f8
  129. bpl7ptl        equ $fa
  130. bpl8pth        equ $fc
  131. bpl8ptl        equ $fe
  132. spr0pth        equ $120
  133. spr0ptl        equ $122
  134. spr1pth        equ $124
  135. spr1ptl        equ $126
  136. spr2pth        equ $128
  137. spr2ptl        equ $12a
  138. spr3pth        equ $12c
  139. spr3ptl        equ $12e
  140. spr4pth        equ $130
  141. spr4ptl        equ $132
  142. spr5pth        equ $134
  143. spr5ptl        equ $136
  144. spr6pth        equ $138
  145. spr6ptl        equ $13a
  146. spr7pth        equ $13c
  147. spr7ptl        equ $13e
  148.  
  149. ; move.l #length,d0
  150. ; moveq.l #2,d1    ; chipmem
  151. ; move.l 4.w,a6
  152. ; jsr allocmem(a6) = -198
  153.  
  154. ; tst.l d0
  155. ; beq.s ohbugger
  156. ; move.l d0,memaddr
  157.  
  158.  
  159. ; move.l 4.w,a6
  160. ; move.l memaddr,a1
  161. ; move.l #size,d0
  162. ; jsr freemem(a6) =-210
  163.  
  164.  
  165. ** This waits for the blitter to finish before allowing program
  166. ** execution to continue.
  167.  
  168.  
  169.  include "ab3:source/protsetupdecode"
  170.  
  171. SAVEREGS MACRO
  172.  movem.l d0-d7/a0-a6,-(a7)
  173.  ENDM
  174.  
  175. GETREGS MACRO
  176.  movem.l (a7)+,d0-d7/a0-a6
  177.  ENDM
  178.  
  179.  
  180. WB MACRO
  181. \@bf:
  182.  btst #6,dmaconr(a6)
  183.  bne.s \@bf
  184.  ENDM
  185.  
  186. WBa MACRO
  187. \@bf:
  188.  move.w #\2,$dff180
  189.  
  190.  btst #6,$bfe001
  191.  bne.s \@bf
  192. \@bz:
  193.  
  194.  move.w #$f0f,$dff180
  195.  
  196.  btst #6,$bfe001
  197.  beq.s \@bz
  198.  
  199.  ENDM
  200.  
  201. *Another version for when a6 <> dff000
  202.  
  203. WBSLOW MACRO
  204. \@bf:
  205.  btst #6,$dff000+dmaconr
  206.  bne.s \@bf
  207.  ENDM
  208.  
  209. WT MACRO
  210. \@bf:
  211.  btst #6,(a3)
  212.  bne.s \@bd
  213.  rts
  214. \@bd: 
  215.  btst #4,(a0)
  216.  beq.s \@bf
  217.  ENDM
  218.  
  219. WTNOT MACRO
  220. \@bf:
  221.  btst #6,(a3)
  222.  bne.s \@bd
  223.  rts
  224. \@bd: 
  225.  btst #4,(a0)
  226.  bne.s \@bf
  227.  ENDM
  228.  
  229. **
  230.  
  231.  include "ab3:source/ProtectionProtection"
  232.  include "macros.i"
  233.  include "ab3:source/defs.i"
  234.  
  235.  move.w (a0)+,mors
  236.  
  237. ; PROTFCALC
  238. ; PROTGCALC
  239. ; PROTHCALC
  240. ; PROTICALC
  241. ; PROTKCALC
  242. ; PROTLCALC
  243. ; PROTMCALC
  244.  
  245.  
  246.  
  247.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  248.  move.w intenar(a6),_storeint
  249.  and.w #$c000,_storeint
  250.  
  251.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  252.  
  253.  st GOURSEL
  254.  
  255.  move.l 4.w,a6
  256.  lea VBLANKInt(pc),a1
  257.  moveq #INTB_COPER,d0
  258.  jsr _LVOAddIntServer(a6)
  259.  
  260.  move.l 4.w,a6
  261.  lea KEYInt(pc),a1
  262.  moveq #INTB_PORTS,d0
  263.  jsr _LVOAddIntServer(a6)
  264.  
  265.  move.l 4.w,a6
  266.  jsr _LVOSuperState(a6)
  267.  move.l d0,SSTACK
  268.  
  269.  DATA_CACHE_OFF d2
  270.  
  271.  move.l 4.w,a6
  272.  move.l SSTACK,d0
  273.  jsr _LVOUserState(a6)
  274.  
  275.  
  276.  clr.b PLR1KEYS
  277.  clr.b PLR1PATH
  278.  clr.b PLR1MOUSE
  279.  st PLR1JOY
  280.  clr.b PLR2KEYS
  281.  clr.b PLR2PATH
  282.  clr.b PLR2MOUSE
  283.  st PLR2JOY
  284.  
  285.  PRSDO
  286.  
  287.  moveq #2,d1    
  288.  move.l #10240*2,d0
  289.  move.l 4.w,a6
  290.  jsr -198(a6)
  291.  move.l d0,TEXTSCRN
  292.  move.w d0,TSPTl
  293.  swap d0
  294.  move.w d0,TSPTh
  295.  
  296.  move.l #nullspr,d0
  297.  move.w d0,txs0l
  298.  move.w d0,txs1l
  299.  move.w d0,txs2l
  300.  move.w d0,txs3l
  301.  move.w d0,txs4l
  302.  move.w d0,txs5l
  303.  move.w d0,txs6l
  304.  move.w d0,txs7l
  305.  swap d0
  306.  move.w d0,txs0h
  307.  move.w d0,txs1h
  308.  move.w d0,txs2h
  309.  move.w d0,txs3h
  310.  move.w d0,txs4h
  311.  move.w d0,txs5h
  312.  move.w d0,txs6h
  313.  move.w d0,txs7h 
  314.  
  315.  moveq #1,d1    
  316.  move.l #120000,d0
  317.  move.l 4.w,a6
  318.  jsr -198(a6)
  319.  move.l d0,LEVELDATA
  320.  
  321.  jsr START
  322.  
  323.  rts
  324.  
  325. _storeint
  326.     dc.w 0
  327.  
  328. * Load level into buffers.
  329.  clr.b doanything
  330.  
  331. ; DRAW TEXT SCREEN
  332.  
  333. TWEENTEXT:
  334.  
  335.  move.l #LEVELTEXT,a0
  336.  move.w PLOPT,d0
  337.  muls #82*16,d0
  338.  add.l d0,a0
  339.  
  340.  move.w #14,d7
  341.  move.w #0,d0
  342. DOWNTEXT:
  343.  move.l TEXTSCRN,a1
  344.  jsr DRAWLINEOFTEXT
  345.  addq #1,d0
  346.  lea 82(a0),a0
  347.  dbra d7,DOWNTEXT
  348.  rts
  349.  
  350. FONTADDRS:
  351.  dc.l ENDFONT0,CHARWIDTHS0
  352.  dc.l ENDFONT1,CHARWIDTHS1
  353.  dc.l ENDFONT2,CHARWIDTHS2
  354.  
  355. ENDFONT0:
  356.  incbin "endfont0"
  357. CHARWIDTHS0:
  358.  incbin "charwidths0"
  359. ENDFONT1:
  360.  incbin "endfont1"
  361. CHARWIDTHS1:
  362.  incbin "charwidths1"
  363. ENDFONT2:
  364.  incbin "endfont2"
  365. CHARWIDTHS2:
  366.  incbin "charwidths2"
  367.  
  368.  even
  369.  
  370. DRAWLINEOFTEXT:
  371.  movem.l d0/a0/d7,-(a7)
  372.  
  373.  muls #80*16,d0
  374.  add.l d0,a1    ; screen pointer
  375.  
  376.  move.l #FONTADDRS,a3
  377.  moveq #0,d0
  378.  move.b (a0)+,d0
  379.  move.l (a3,d0.w*8),a2
  380.  move.l 4(a3,d0.w*8),a3
  381.  
  382.  moveq #0,d1    ; width counter:
  383.  move.w #79,d6
  384.  tst.b (a0)+
  385.  beq.s NOTCENTRED
  386.  moveq #-1,d5
  387.  move.l a0,a4
  388.  moveq #0,d2
  389.  moveq #0,d3
  390.  move.w #79,d0    ; number of chars
  391. .addup:
  392.  addq #1,d5
  393.  move.b (a4)+,d2
  394.  move.b -32(a3,d2.w),d4
  395.  add.w d4,d3
  396.  cmp.b #32,d2
  397.  beq.s .DONTPUTIN
  398.  move.w d5,d6
  399.  move.w d3,d1
  400. .DONTPUTIN:
  401.  dbra d0,.addup
  402.  asr.w #1,d1
  403.  neg.w d1
  404.  add.w #320,d1    ; horiz pos of start x
  405.  
  406. NOTCENTRED:
  407.  move.w d6,d7
  408. DOACHAR:
  409.  moveq #0,d2
  410.  move.b (a0)+,d2
  411.  sub.w #32,d2
  412.  moveq #0,d6
  413.  move.b (a3,d2.w),d6
  414.  asl.w #5,d2
  415.  lea (a2,d2.w),a4    ; char font
  416. val SET 0
  417.  REPT 16
  418.  move.w (a4)+,d0
  419.  bfins d0,val(a1){d1:d6}
  420. val SET val+80
  421.  ENDR
  422.  add.w d6,d1
  423.  dbra d7,DOACHAR
  424.  movem.l (a7)+,d0/a0/d7
  425.  rts 
  426.  
  427.  
  428. CLRTWEENSCRN:
  429.  move.l TEXTSCRN,a0
  430.  move.w #(10240/16)-1,d0
  431.  moveq #$0,d1
  432. .lll
  433.  move.l d1,(a0)+
  434.  move.l d1,(a0)+
  435.  move.l d1,(a0)+
  436.  move.l d1,(a0)+
  437.  move.l d1,(a0)+
  438.  move.l d1,(a0)+
  439.  move.l d1,(a0)+
  440.  move.l d1,(a0)+
  441.  dbra d0,.lll
  442.  rts
  443.  
  444. PLAYTHEGAME:
  445.  
  446.  move.w #0,TXTCOLL
  447.  
  448.  bsr.b CLRTWEENSCRN
  449.  
  450.  cmp.b #'n',mors
  451.  bne.s .notext
  452.  bsr TWEENTEXT
  453. .notext
  454.  
  455.  move.l #TEXTCOP,$dff080
  456.  
  457.  move.w #$10,d0
  458.  move.w #7,d1
  459.  
  460. .fdup
  461.  move.w d0,TXTCOLL
  462.  add.w #$121,d0
  463. .wtframe:
  464.  btst #5,$dff000+intreqrl
  465.  beq.s .wtframe
  466.  move.w #$0020,$dff000+intreq
  467.  dbra d1,.fdup
  468.  
  469.  jsr INITCOPPERSCRN
  470.  
  471. ; Get level memory.
  472.  
  473.  moveq #1,d1
  474.  move.l #50000,d0
  475.  move.l 4.w,a6
  476.  jsr -198(a6)
  477.  move.l d0,LEVELGRAPHICS
  478.  
  479.  moveq #1,d1
  480.  move.l #40000,d0
  481.  move.l 4.w,a6
  482.  jsr -198(a6)
  483.  move.l d0,LEVELCLIPS
  484.  
  485.  move.l #$dff000,a6
  486.  jsr SETPLAYERS
  487.  
  488. ; move.l #LEVELDATAD,LEVELDATA
  489. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  490. ; move.l #LEVELCLIPSD,LEVELCLIPS
  491.  
  492. ; bra noload
  493.  
  494.  move.l doslib,a6
  495.  move.l #LDname,d1
  496.  move.l #1005,d2
  497.  jsr -30(a6)
  498.  move.l d0,LDhandle
  499.  
  500.  move.l doslib,a6
  501.  move.l d0,d1
  502.  move.l LEVELCLIPS,d2
  503.  move.l #40000,d3
  504.  jsr -42(a6)
  505.  
  506.  move.l doslib,a6
  507.  move.l LDhandle,d1
  508.  jsr -36(a6)
  509.  
  510. *************************************
  511.     move.l    LEVELCLIPS,d0
  512.     moveq    #0,d1
  513.     move.l LEVELDATA,a0
  514.     lea    WorkSpace,a1
  515.     lea    $0.w,a2
  516.     jsr    unLHA
  517. *************************************
  518.  
  519. ********
  520.  
  521.  move.l doslib,a6
  522.  move.l #LGname,d1
  523.  move.l #1005,d2
  524.  jsr -30(a6)
  525.  move.l d0,LGhandle
  526.  
  527.  move.l doslib,a6
  528.  move.l d0,d1
  529.  move.l LEVELCLIPS,d2
  530.  move.l #40000,d3
  531.  jsr -42(a6)
  532.  
  533.  move.l doslib,a6
  534.  move.l LGhandle,d1
  535.  jsr -36(a6)
  536.  
  537. *************************************
  538.     move.l    LEVELCLIPS,d0
  539.     moveq    #0,d1
  540.     move.l LEVELGRAPHICS,a0
  541.     lea    WorkSpace,a1
  542.     lea    $0.w,a2
  543.     jsr    unLHA
  544. *************************************
  545.  
  546.  
  547. ********
  548.  
  549.  move.l doslib,a6
  550.  move.l #LCname,d1
  551.  move.l #1005,d2
  552.  jsr -30(a6)
  553.  move.l d0,LChandle
  554.  
  555.  move.l doslib,a6
  556.  move.l d0,d1
  557.  move.l #WorkSpace+16384,d2
  558.  move.l #16000,d3
  559.  jsr -42(a6)
  560.  
  561.  move.l doslib,a6
  562.  move.l LChandle,d1
  563.  jsr -36(a6)
  564.  
  565. *************************************
  566.     move.l    #WorkSpace+16384,d0
  567.     moveq    #0,d1
  568.     move.l LEVELCLIPS,a0
  569.     lea    WorkSpace,a1
  570.     lea    $0,a2
  571.     jsr    unLHA
  572. *************************************
  573.  
  574.  
  575. *******
  576.  
  577. noload:
  578.  
  579. ********
  580.  
  581. ; move.l doslib,a6
  582. ; move.l #Prefsname,d1
  583. ; move.l #1005,d2
  584. ; jsr -30(a6)
  585. ; move.l d0,Prefshandle
  586.  
  587. ; move.l doslib,a6
  588. ; move.l d0,d1
  589. ; move.l #Prefsfile,d2
  590. ; move.l #50,d3
  591. ; jsr -42(a6)
  592.  
  593. ; move.l doslib,a6
  594. ; move.l Prefshandle,d1
  595. ; jsr -36(a6)
  596.  
  597. *******
  598.  
  599.  cmp.b #'s',Prefsfile+2
  600.  seq STEREO
  601.  
  602.  IFNE CD32VER
  603.  move.l doslib,a6
  604.  move.l #115,d1
  605.  jsr -198(a6)
  606.  ENDC
  607.  
  608.  
  609. ; move.l doslib,d0
  610. ; move.l d0,a1
  611. ; move.l 4.w,a6
  612. ; jsr CloseLib(a6)
  613.  
  614.  move.l #$dff000,a6
  615.  move.w #$87c0,dmacon(a6)
  616.  move.w #$8020,dmacon(a6)
  617. ; move.w intenar(a6),saveinters
  618.  move.w #$002f,intena(a6)
  619.  move.w #$00ff,$dff09e
  620.  
  621. *** Put myself in supervisor mode
  622.  
  623.  bra blag
  624. ; move.l $6c,d0
  625. ; move.l #blag,$6c
  626. ; move.w #$8010,intreq(a6)
  627.  
  628.  rts
  629.  
  630. saveit: ds.l 10
  631. doslibname: dc.b 'dos.library',0
  632.  even
  633. doslib: dc.l 0
  634.  
  635. mors: dc.w 0
  636.  
  637. LDname: dc.b 'ab3d2:levels/level_'
  638. LEVA:
  639.  dc.b 'a/twolev.bin',0
  640.  even
  641. LDhandle: dc.l 0
  642. LGname: dc.b 'ab3d2:levels/level_'
  643. LEVB:
  644.  dc.b 'a/twolev.graph.bin',0
  645.  even
  646. LGhandle: dc.l 0
  647. LCname: dc.b 'ab3d2:levels/level_'
  648. LEVC:
  649.  dc.b 'a/twolev.clips',0
  650.  even
  651. LChandle: dc.l 0
  652.  
  653.     cnop    0,4
  654.  
  655. Prefsname: dc.b 'ram:prefs',0
  656.  even
  657. Prefshandle: dc.l 0
  658.  
  659. Prefsfile:
  660.  dc.b 'k4nx'
  661.  ds.b 50
  662.  
  663.  even
  664.  
  665.  cnop 0,4
  666.  
  667. VBLANKInt
  668.  dc.l 0,0
  669.  dc.b NT_INTERRUPT,100
  670.  dc.l Prefsname
  671.  dc.l 0
  672.  dc.l Chan0inter
  673.  
  674.  
  675. KEYInt
  676.  dc.l 0,0
  677.  dc.b NT_INTERRUPT,127
  678.  dc.l Prefsname
  679.  dc.l 0
  680.  dc.l key_interrupt
  681.  
  682.  
  683. blag:
  684. ; move.w #$10,intreq(a6)
  685. ; move.l d0,$6c
  686. ; move.w #$7fff,intena(a6)
  687.  
  688. ; move.w #$20,$dff1dc
  689.  
  690. ; move.l 4.w,a6
  691. ; lea VBLANKInt(pc),a1
  692. ; moveq #INTB_COPER,d0
  693. ; jsr _LVOAddIntServer(a6)
  694.  
  695. ****************************
  696. * Initialize level
  697. ****************************
  698. * Poke all clip offsets into
  699. * correct bit of level data.
  700. ****************************
  701.  move.l LEVELGRAPHICS,a0
  702.  move.l 12(a0),a1
  703.  add.l a0,a1
  704.  move.l a1,ZoneGraphAdds
  705.  move.l (a0),a1
  706.  add.l a0,a1
  707.  move.l a1,DoorData
  708.  move.l 4(a0),a1
  709.  add.l a0,a1
  710.  move.l a1,LiftData
  711.  move.l 8(a0),a1
  712.  add.l a0,a1
  713.  move.l a1,SwitchData
  714.  adda.w #16,a0
  715.  move.l a0,ZoneAdds
  716.  
  717.  move.l LEVELDATA,a1
  718.  move.l 16+6(a1),a2
  719.  add.l a1,a2
  720.  move.l a2,Points
  721.  move.w 8+6(a1),d0
  722.  lea 4(a2,d0.w*4),a2
  723.  move.l a2,PointBrights
  724.  
  725.  move.l 20+6(a1),a2
  726.  add.l a1,a2
  727.  move.l a2,FloorLines
  728.  move.l 24+6(a1),a2
  729.  add.l a1,a2
  730.  move.l a2,ObjectData
  731. *****************************************
  732. * Just for charles
  733.  
  734. ; move.w #$6060,6(a2)
  735. ; move.l #$d0000,8(a2)
  736. ; sub.w #40,4(a2)
  737. ; move.w #45*256+45,14(a2)
  738. ****************************************
  739.  move.l 28+6(a1),a2
  740.  add.l a1,a2
  741.  move.l a2,PlayerShotData
  742.  move.l 32+6(a1),a2
  743.  add.l a1,a2
  744.  move.l a2,NastyShotData
  745.  
  746.  lea  64*20(a2),a2
  747.  move.l a2,OtherNastyData
  748.  
  749.  move.l 36+6(a1),a2
  750.  add.l a1,a2
  751.  move.l a2,ObjectPoints  
  752.  move.l 40+6(a1),a2
  753.  add.l a1,a2
  754.  move.l a2,PLR1_Obj
  755.  move.l 44+6(a1),a2
  756.  add.l a1,a2
  757.  move.l a2,PLR2_Obj
  758.  move.w 14+6(a1),NumObjectPoints
  759.  
  760. ; bra noclips
  761.   
  762.  move.l LEVELCLIPS,a2
  763.  moveq #0,d0
  764.  move.w 10+6(a1),d7    ;numzones
  765. assignclips:
  766.  move.l (a0)+,a3
  767.  add.l a1,a3    ; pointer to a zone
  768.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  769. dowholezone:
  770.  tst.w (a3)
  771.  blt.s nomorethiszone
  772.  tst.w 2(a3)
  773.  blt.s thisonenull
  774.  
  775.  move.l d0,d1
  776.  asr.l #1,d1
  777.  move.w d1,2(a3)
  778.  
  779. findnextclip:
  780.  cmp.w #-2,(a2,d0.l)
  781.  beq.s foundnextclip
  782.  addq.l #2,d0
  783.  bra.s findnextclip
  784. foundnextclip
  785.  addq.l #2,d0
  786.  
  787. thisonenull:
  788.  addq #8,a3 
  789.  bra.s dowholezone
  790. nomorethiszone:
  791.  dbra d7,assignclips
  792.  
  793.  lea (a2,d0.l),a2
  794.  move.l a2,CONNECT_TABLE
  795.  
  796. noclips:
  797.  
  798. * Put in addresses of glowything
  799.  
  800.  
  801. ************************************
  802.  
  803. ; cmp.b #'k',Prefsfile
  804. ; bne.s nkb
  805.  
  806. ;nkb:
  807. ; cmp.b #'m',Prefsfile
  808. ; bne.s nmc
  809. ; clr.b PLR1KEYS
  810. ; clr.b PLR1PATH
  811. ; st PLR1MOUSE
  812. ; clr.b PLR1JOY
  813. ;nmc:
  814. ; cmp.b #'j',Prefsfile
  815. ; bne.s njc
  816. ; clr.b PLR1KEYS
  817. ; clr.b PLR1PATH
  818. ; clr.b PLR1MOUSE
  819. ; st PLR1JOY
  820. ;njc:
  821.  
  822.  clr.b PLR1_StoodInTop
  823.  move.l #playerheight,PLR1s_height
  824.  
  825.  move.l #empty,pos1LEFT
  826.  move.l #empty,pos2LEFT
  827.  move.l #empty,pos1RIGHT
  828.  move.l #empty,pos2RIGHT
  829.  move.l #emptyend,Samp0endLEFT
  830.  move.l #emptyend,Samp1endLEFT
  831.  move.l #emptyend,Samp0endRIGHT
  832.  move.l #emptyend,Samp1endRIGHT
  833.  
  834.  move.l #nullspr,d0
  835.  move.w d0,s4l
  836.  move.w d0,s5l
  837.  move.w d0,s6l
  838.  move.w d0,s7l
  839.  swap d0
  840.  move.w d0,s4h
  841.  move.w d0,s5h
  842.  move.w d0,s6h
  843.  move.w d0,s7h 
  844.  
  845.  move.l #nullline,d0
  846.  move.w d0,n1l
  847.  swap d0
  848.  move.w d0,n1h
  849.  
  850.  move.l Panel,d0
  851.  move.w d0,p1l
  852.  swap d0
  853.  move.w d0,p1h
  854.  swap d0
  855.  add.l #40,d0
  856.  move.w d0,p2l
  857.  swap d0
  858.  move.w d0,p2h
  859.  swap d0
  860.  add.l #40,d0
  861.  move.w d0,p3l
  862.  swap d0
  863.  move.w d0,p3h
  864.  swap d0
  865.  add.l #40,d0
  866.  move.w d0,p4l
  867.  swap d0
  868.  move.w d0,p4h
  869.  swap d0
  870.  add.l #40,d0
  871.  move.w d0,p5l
  872.  swap d0
  873.  move.w d0,p5h
  874.  swap d0
  875.  add.l #40,d0
  876.  move.w d0,p6l
  877.  swap d0
  878.  move.w d0,p6h
  879.  swap d0
  880.  add.l #40,d0
  881.  move.w d0,p7l
  882.  swap d0
  883.  move.w d0,p7h
  884.  swap d0
  885.  add.l #40,d0
  886.  move.w d0,p8l
  887.  swap d0
  888.  move.w d0,p8h
  889.  
  890. *******************************
  891. * TIMER SCREEN SETUP
  892. ; move.l #TimerScr,d0
  893. ; move.w d0,p1l
  894. ; swap d0
  895. ; move.w d0,p1h
  896. ; move.w #$1201,Panelcon
  897.  
  898.  move.l #borders,d0
  899.  move.w d0,s0l
  900.  swap d0
  901.  move.w d0,s0h
  902.  move.l #borders+2592,d0
  903.  move.w d0,s1l
  904.  swap d0
  905.  move.w d0,s1h
  906.  move.l #borders+2592*2,d0
  907.  move.w d0,s2l
  908.  swap d0
  909.  move.w d0,s2h
  910.  move.l #borders+2592*3,d0
  911.  move.w d0,s3l
  912.  swap d0
  913.  move.w d0,s3h
  914.  
  915.  move.w #52*256+64,borders
  916.  move.w #212*256+0,borders+8
  917.  move.w #52*256+64,borders+2592
  918.  move.w #212*256+128,borders+8+2592
  919.  move.w #52*256+192,borders+2592*2
  920.  move.w #212*256+0,borders+8+2592*2
  921.  move.w #52*256+192,borders+2592*3
  922.  move.w #212*256+128,borders+8+2592*3
  923.  
  924.  move.l #FacePlace,d0
  925.  move.w d0,f1l
  926.  swap d0
  927.  move.w d0,f1h
  928.  move.l #FacePlace+32*24,d0
  929.  move.w d0,f2l
  930.  swap d0
  931.  move.w d0,f2h
  932.  move.l #FacePlace+32*24*2,d0
  933.  move.w d0,f3l
  934.  swap d0
  935.  move.w d0,f3h
  936.  move.l #FacePlace+32*24*3,d0
  937.  move.w d0,f4l
  938.  swap d0
  939.  move.w d0,f4h
  940.  move.l #FacePlace+32*24*4,d0
  941.  move.w d0,f5l
  942.  swap d0
  943.  move.w d0,f5h
  944.   
  945.  
  946.  move.l #bigfield,d0
  947.  move.w d0,ocl
  948.  swap d0
  949.  move.w d0,och
  950.  
  951.  bset.b #1,$bfe001
  952.  
  953. ; jmp stuff
  954. ;endstuff:
  955.  
  956.  move.w #$00ff,$dff09e
  957.  
  958. ; move.l #Blurbfield,$dff080
  959.  
  960.  move.w #0,d0
  961.  
  962.  move.l #scrn,d0
  963.  move.w d0,pl1l
  964.  swap d0
  965.  move.w d0,pl1h
  966.  
  967.  move.l #scrn+40,d0
  968.  move.w d0,pl2l
  969.  swap d0
  970.  move.w d0,pl2h
  971.  
  972.  move.l #scrn+80,d0
  973.  move.w d0,pl3l
  974.  swap d0
  975.  move.w d0,pl3h
  976.  
  977.  move.l #scrn+120,d0
  978.  move.w d0,pl4l
  979.  swap d0
  980.  move.w d0,pl4h
  981.  
  982.  move.l #scrn+160,d0
  983.  move.w d0,pl5l
  984.  swap d0
  985.  move.w d0,pl5h
  986.  
  987.  move.l #scrn+200,d0
  988.  move.w d0,pl6l
  989.  swap d0
  990.  move.w d0,pl6h
  991.  
  992.  move.l #scrn+240,d0
  993.  move.w d0,pl7l
  994.  swap d0
  995.  move.w d0,pl7h
  996.  
  997.  
  998. ****************************
  999.  jsr INITPLAYER
  1000. ; bsr initobjpos
  1001. ****************************
  1002.  
  1003.  
  1004.  move.l #$dff000,a6
  1005.  
  1006.  move.l #null,$dff0a0
  1007.  move.w #100,$dff0a4
  1008.  move.w #443,$dff0a6
  1009.  move.w #63,$dff0a8
  1010.  
  1011.  move.l #null2,$dff0b0
  1012.  move.w #100,$dff0b4
  1013.  move.w #443,$dff0b6
  1014.  move.w #63,$dff0b8
  1015.  
  1016.  move.l #null4,$dff0c0
  1017.  move.w #100,$dff0c4
  1018.  move.w #443,$dff0c6
  1019.  move.w #63,$dff0c8
  1020.  
  1021.  move.l #null3,$dff0d0
  1022.  move.w #100,$dff0d4
  1023.  move.w #443,$dff0d6
  1024.  move.w #63,$dff0d8
  1025.  
  1026.  move.l #tab,a1
  1027.  move.w #64,d7
  1028.  move.w #0,d6
  1029. outerlop
  1030.  move.l #pretab,a0
  1031.  move.w #255,d5
  1032. scaledownlop:
  1033.  move.b (a0)+,d0
  1034.  ext.w d0
  1035.  ext.l d0
  1036.  muls d6,d0
  1037.  asr.l #6,d0
  1038.  move.b d0,(a1)+
  1039.  dbra d5,scaledownlop
  1040.  addq #1,d6
  1041.  dbra d7,outerlop
  1042.  
  1043.  move.l #$dff000,a6
  1044.  
  1045.  move.w #$c018,intena(a6)
  1046.  
  1047.  move.w #$f,dmacon(a6)
  1048.  move.w #$820f,dmacon(a6)
  1049.  
  1050. ; bsr protinit
  1051.  
  1052.  
  1053. ; move.w #$20,$1dc(a6)
  1054.  
  1055.  move.w #$0,$dff034
  1056.  move.w #0,Conditions
  1057.  
  1058.  cmp.b #'n',mors
  1059.  beq.s .nokeys
  1060.  move.w #%111111111111,Conditions
  1061. .nokeys:
  1062.  
  1063.  move.l #KeyMap,a5
  1064.  clr.b $45(a5)
  1065.  
  1066.  move.l #ingame,mt_data
  1067.  clr.b UseAllChannels
  1068.  
  1069. ; cmp.b #'b',Prefsfile+3
  1070. ; bne.s .noback
  1071. ; jsr mt_init
  1072. ;.noback:
  1073. ;
  1074. ; clr.b CHANNELDATA
  1075. ; clr.b CHANNELDATA+8
  1076. ; clr.b CHANNELDATA+16
  1077. ; clr.b CHANNELDATA+24
  1078. ;
  1079. ; cmp.b #'b',Prefsfile+3
  1080. ; bne.s noreserve
  1081. ;
  1082. ; st CHANNELDATA
  1083. ; st CHANNELDATA+8
  1084. ; st CHANNELDATA+16
  1085. ; st CHANNELDATA+24
  1086. ;noreserve: 
  1087.  
  1088. ; st CHANNELDATA
  1089. ; st CHANNELDATA+8
  1090.  
  1091.  move.l SampleList+6*8,pos0LEFT
  1092.  move.l SampleList+6*8+4,Samp0endLEFT
  1093.  move.l #playerheight,PLR1s_targheight
  1094.  move.l #playerheight,PLR1s_height
  1095.  move.l #playerheight,PLR2s_targheight
  1096.  move.l #playerheight,PLR2s_height
  1097.  
  1098. ; cmp.b #'n',mors
  1099. ; beq.s nohandshake
  1100. ;
  1101. ; move.b #%11011000,$bfd200
  1102. ; move.b #%00010000,$bfd000
  1103. ;waitloop:
  1104. ; btst.b #4,$bfd000
  1105. ; bne.s waitloop
  1106. ; move.b #%11000000,$bfd200
  1107.  
  1108. ;wtmouse:
  1109. ; btst #6,$bfe001
  1110. ; bne.s wtmouse
  1111.  
  1112. ;nohandshake:
  1113.  
  1114. ; jmp end
  1115.  
  1116.  move.l COPSCRN1,drawpt
  1117.  move.l COPSCRN2,olddrawpt
  1118.  
  1119.  jsr CLEARKEYBOARD
  1120.  jsr MAKEBACKROUT
  1121.  
  1122.  clr.b MASTERQUITTING
  1123.  
  1124.  cmp.b #'n',mors
  1125.  seq SLAVEQUITTING
  1126.  
  1127.  move.w #127,PLR2_energy
  1128.  
  1129. ; move.l #ANOTHERSUP,$80
  1130. ; trap #0
  1131. ; rts
  1132. ;
  1133. ;ANOTHERSUP:
  1134.  
  1135.  move.l $4.w,a6
  1136.  jsr _LVOSuperState(a6)
  1137.  move.l d0,SSTACK
  1138.  
  1139.  CACHE_FREEZE_OFF d2
  1140.  DATA_CACHE_ON d2
  1141.  
  1142.  move.l $4.w,a6
  1143.  move.l SSTACK,d0
  1144.  jsr _LVOUserState(a6)
  1145.  
  1146.  move.w #0,hitcol
  1147.  move.w #0,hitcol2
  1148.  
  1149.  cmp.b #'n',mors
  1150.  bne.s NOCLTXT
  1151.  
  1152.  move.b #0,lastpressed
  1153. .wtpress
  1154.  btst #6,$bfe001
  1155.  beq.s CLOSETXT
  1156.  btst #7,$bfe001
  1157.  beq.s CLOSETXT
  1158.  tst.b lastpressed
  1159.  beq.s .wtpress
  1160.  
  1161. CLOSETXT:
  1162.  
  1163.  move.w #$8f8,d0
  1164.  move.w #7,d1
  1165.  
  1166. .fdup
  1167.  move.w d0,TXTCOLL
  1168.  sub.w #$121,d0
  1169. .wtframe:
  1170.  btst #5,$dff000+intreqrl
  1171.  beq.s .wtframe
  1172.  move.w #$0020,$dff000+intreq
  1173.  dbra d1,.fdup
  1174.  
  1175.  move.w #0,TXTCOLL
  1176.  
  1177. NOCLTXT:
  1178.  
  1179.  
  1180.  
  1181.     move.l    4.w,a6
  1182.     jsr    _LVOForbid(a6)
  1183. ;    jsr    _LVODisable(a6)
  1184.  
  1185.  
  1186. ;    move.w    #%0111111111111111,intena+$dff000
  1187. ;    move.w    #%1000000011111111,intena+$dff000
  1188.  
  1189.  
  1190.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1191.  
  1192.  
  1193.  clr.b PLR1_Ducked
  1194.  clr.b PLR2_Ducked
  1195.  clr.b p1_ducked
  1196.  clr.b p2_ducked
  1197.  
  1198. ********************************************
  1199. ; jmp  ENDGAMESCROLL
  1200. ********************************************
  1201.  
  1202.  
  1203.  st doanything
  1204.  
  1205. lop:
  1206.  
  1207.  btst #6,$bfe001
  1208.  bne.b .nocop
  1209.  
  1210.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1211.  
  1212. .nocop
  1213.  
  1214.  cmp.b #'n',mors
  1215.  bne.b .nopause
  1216.  
  1217.  move.l #KeyMap,a5
  1218.  tst.b $19(a5)
  1219.  beq.s .nopause
  1220.  clr.b doanything
  1221.  
  1222. .waitrel:
  1223.  
  1224.  tst.b PLR1JOY
  1225.  beq.s .NOJOY
  1226.  jsr _ReadJoy1
  1227. .NOJOY
  1228.  
  1229.  tst.b $19(a5)
  1230.  bne.s .waitrel
  1231.  
  1232.  bsr PAUSEOPTS
  1233.  
  1234.  
  1235.  st doanything
  1236. .nopause: 
  1237.  
  1238.  st READCONTROLS
  1239.  move.l #$dff000,a6
  1240.  
  1241.  move.w hitcol,d0
  1242.  beq.s nofadedownhc
  1243.  sub.w #$100,d0
  1244.  move.w d0,hitcol
  1245.  move.w d0,hitcol2
  1246. nofadedownhc:
  1247.  
  1248.  cmp.b #'n',mors
  1249.  beq.b .nopause
  1250.  
  1251.  move.b SLAVEPAUSE,d0
  1252.  or.b MASTERPAUSE,d0
  1253.  beq.s .nopause
  1254.  clr.b doanything
  1255.  
  1256.  move.l #KeyMap,a5
  1257. .waitrel:
  1258.  
  1259.  
  1260.  cmp.b #'s',mors
  1261.  beq.s .RE2
  1262.  tst.b PLR1JOY
  1263.  beq.s .NOJOY
  1264.  jsr _ReadJoy1
  1265.  bra.b .RE1
  1266. .RE2:
  1267.  tst.b PLR2JOY
  1268.  beq.s .NOJOY
  1269.  jsr _ReadJoy2
  1270. .RE1
  1271. .NOJOY:
  1272.  tst.b $19(a5)
  1273.  bne.s .waitrel
  1274.  
  1275.  bsr PAUSEOPTS
  1276.  
  1277.  cmp.b #'m',mors
  1278.  bne.s .slavelast
  1279.  Jsr SENDFIRST
  1280.  bra.b .masfirst
  1281. .slavelast
  1282.  Jsr RECFIRST
  1283. .masfirst:
  1284.  clr.b SLAVEPAUSE
  1285.  clr.b MASTERPAUSE
  1286.  st doanything
  1287.  
  1288. .nopause: 
  1289.  
  1290.  
  1291.  
  1292.  move.l drawpt,d0
  1293.  move.l olddrawpt,drawpt
  1294.  move.l d0,olddrawpt
  1295.  move.l d0,$dff084    
  1296.  move.l drawpt,a3
  1297. ; move.l COPSCRNBUFF,a3
  1298.  adda.w #10,a3
  1299.  move.l a3,frompt
  1300.  lea 104*4*40(a3),a3
  1301.  move.l a3,midpt
  1302.  
  1303.  cmp.b #'s',mors
  1304.  beq.s nowaitslave
  1305.  
  1306. waitfortop:
  1307.  
  1308.  btst.b #0,intreqrl(a6)
  1309.  beq.b waitfortop
  1310.  
  1311.  move.w #$1,intreq(a6)
  1312.  move.l #PLR1_GunData,GunData
  1313.  move.b PLR1_GunSelected,GunSelected
  1314.  bra.b waitmaster
  1315.  
  1316. nowaitslave:
  1317.  move.l #PLR2_GunData,GunData
  1318.  move.b PLR2_GunSelected,GunSelected
  1319. waitmaster:
  1320.  
  1321.  
  1322.  move.l waterpt,a0
  1323.  move.l (a0)+,watertouse
  1324.  cmp.l #endwaterlist,a0
  1325.  blt.s okwat
  1326.  move.l #waterlist,a0
  1327. okwat:
  1328.  move.l a0,waterpt
  1329.  
  1330.  add.w #640,wtan
  1331.  and.w #8191,wtan
  1332.  addq.w #1,wateroff
  1333.  and.w #63,wateroff
  1334.  
  1335.  move.l GunData,a6
  1336.  moveq #0,d0
  1337.  move.b GunSelected,d0
  1338.  lsl.w #2,d0
  1339.  lea (a6,d0.w*8),a6
  1340.  move.w (a6),d0
  1341.  asr.w #3,d0
  1342.  move.w d0,Ammo
  1343.  
  1344.  move.l PLR1_xoff,OLDX1
  1345.  move.l PLR1_zoff,OLDZ1
  1346.  move.l PLR2_xoff,OLDX2
  1347.  move.l PLR2_zoff,OLDZ2
  1348.  
  1349.  
  1350.  
  1351.  move.l #$dff000,a6
  1352.  
  1353.  cmp.b #'s',mors
  1354.  beq ASlaveShouldWaitOnHisMaster
  1355.  
  1356.  cmp.b #'n',mors
  1357.  bne NotOnePlayer
  1358.  
  1359.  move.w PLR1_energy,Energy
  1360.  move.w FramesToDraw,TempFrames
  1361.  cmp.w #15,TempFrames
  1362.  blt.s .okframe
  1363.  move.w #15,TempFrames
  1364. .okframe:
  1365.  move.w #0,FramesToDraw
  1366.  
  1367. *********************************************
  1368. *********** TAKE THIS OUT *******************
  1369. *********************************************
  1370.  
  1371.  move.l CHEATPTR,a4
  1372.  add.l #200000,a4
  1373.  moveq #0,d0
  1374.  move.b (a4),d0
  1375.  
  1376.  move.l #KeyMap,a5
  1377.  tst.b (a5,d0.w)
  1378.  beq.s .nocheat
  1379.  
  1380.  addq #1,a4
  1381.  cmp.l #ENDCHEAT,a4
  1382.  blt.s .nocheat
  1383.  cmp.w #0,CHEATNUM
  1384.  beq.s .nocheat
  1385.  subq.w #1,CHEATNUM
  1386.  move.l #CHEATFRAME,a4
  1387.  move.w #127,PLR1_energy
  1388.  bsr EnergyBar
  1389. .nocheat
  1390.  
  1391.  sub.l #200000,a4
  1392.  move.l a4,CHEATPTR
  1393.  
  1394. **********************************************
  1395. **********************************************
  1396. **********************************************
  1397.  
  1398.  move.l PLR1s_xoff,p1_xoff
  1399.  move.l PLR1s_zoff,p1_zoff
  1400.  move.l PLR1s_yoff,p1_yoff
  1401.  move.l PLR1s_height,p1_height
  1402.  move.w PLR1s_angpos,p1_angpos
  1403.  move.w PLR1_bobble,p1_bobble
  1404.  move.b PLR1_clicked,p1_clicked
  1405.  move.b PLR1_fire,p1_fire
  1406.  clr.b PLR1_clicked
  1407.  move.b PLR1_SPCTAP,p1_spctap
  1408.  clr.b PLR1_SPCTAP
  1409.  move.b PLR1_Ducked,p1_ducked
  1410.  move.b PLR1_GunSelected,p1_gunselected
  1411.  
  1412.  bsr PLR1_Control
  1413.  
  1414.  move.l PLR1_Roompt,a0
  1415.  move.l ToZoneRoof(a0),SplitHeight
  1416.  move.w p1_xoff,THISPLRxoff
  1417.  move.w p1_zoff,THISPLRzoff
  1418.  
  1419.  
  1420.  move.l #$60000,p2_yoff
  1421.  move.l PLR2_Obj,a0
  1422.  move.w #-1,GraphicRoom(a0)
  1423.  move.w #-1,12(a0)
  1424.  move.b #0,17(a0)
  1425.  move.l #BollocksRoom,PLR2_Roompt
  1426.  
  1427.  bra donetalking
  1428.  
  1429. NotOnePlayer:
  1430.  move.l #KeyMap,a5
  1431.  tst.b $19(a5)
  1432.  sne MASTERPAUSE
  1433.  
  1434. *********************************
  1435.  move.w PLR1_energy,Energy
  1436. ; change this back
  1437. *********************************
  1438.  
  1439.  jsr SENDFIRST
  1440.  
  1441.  move.w FramesToDraw,TempFrames
  1442.  cmp.w #15,TempFrames
  1443.  blt.s .okframe
  1444.  move.w #15,TempFrames
  1445. .okframe:
  1446.  move.w #0,FramesToDraw
  1447.  
  1448.  move.l PLR1s_xoff,p1_xoff
  1449.  move.l PLR1s_zoff,p1_zoff
  1450.  move.l PLR1s_yoff,p1_yoff
  1451.  move.l PLR1s_height,p1_height
  1452.  move.w PLR1s_angpos,p1_angpos
  1453.  move.w PLR1_bobble,p1_bobble
  1454.  move.b PLR1_clicked,p1_clicked
  1455.  clr.b PLR1_clicked
  1456.  move.b PLR1_fire,p1_fire
  1457.  move.b PLR1_SPCTAP,p1_spctap
  1458.  clr.b PLR1_SPCTAP
  1459.  move.b PLR1_Ducked,p1_ducked
  1460.  move.b PLR1_GunSelected,p1_gunselected
  1461.  
  1462.  move.l p1_xoff,d0
  1463.  jsr SENDFIRST
  1464.  move.l d0,p2_xoff
  1465.  
  1466.  move.l p1_zoff,d0
  1467.  jsr SENDFIRST
  1468.  move.l d0,p2_zoff 
  1469.  
  1470.  move.l p1_yoff,d0
  1471.  jsr SENDFIRST
  1472.  move.l d0,p2_yoff
  1473.   
  1474.  move.l p1_height,d0
  1475.  jsr SENDFIRST
  1476.  move.l d0,p2_height
  1477.  
  1478.  move.w p1_angpos,d0
  1479.  swap d0
  1480.  move.w p1_bobble,d0
  1481.  jsr SENDFIRST
  1482.  move.w d0,p2_bobble
  1483.  swap d0
  1484.  move.w d0,p2_angpos
  1485.  
  1486.  
  1487.  move.w TempFrames,d0
  1488.  swap d0
  1489.  move.b p1_spctap,d0
  1490.  lsl.w #8,d0
  1491.  move.b p1_clicked,d0
  1492.  jsr SENDFIRST
  1493.  move.b d0,p2_clicked
  1494.  lsr.w #8,d0
  1495.  move.b d0,p2_spctap
  1496.  
  1497.  
  1498.  move.w Rand1,d0
  1499.  swap d0
  1500.  move.b p1_ducked,d0
  1501.  lsl.w #8,d0
  1502.  move.b p1_gunselected,d0
  1503.  jsr SENDFIRST
  1504.  move.b d0,p2_gunselected
  1505.  lsr.w #8,d0
  1506.  move.b d0,p2_ducked
  1507.  
  1508.  move.b p1_fire,d0
  1509.  lsl.w #8,d0
  1510.  move.b MASTERQUITTING,d0
  1511.  or.b d0,SLAVEQUITTING
  1512.  swap d0
  1513.  move.b MASTERPAUSE,d0
  1514.  or.b d0,SLAVEPAUSE
  1515.  jsr SENDFIRST
  1516.  or.b d0,MASTERPAUSE
  1517.  or.b d0,SLAVEPAUSE
  1518.  swap d0
  1519.  or.b d0,SLAVEQUITTING
  1520.  or.b d0,MASTERQUITTING
  1521.  lsr.w #8,d0
  1522.  move.b d0,p2_fire
  1523.  
  1524.  bsr PLR1_Control
  1525.  bsr PLR2_Control
  1526.  move.l PLR1_Roompt,a0
  1527.  move.l ToZoneRoof(a0),SplitHeight
  1528.  move.w p1_xoff,THISPLRxoff
  1529.  move.w p1_zoff,THISPLRzoff
  1530.  
  1531.  bra donetalking
  1532.  
  1533. ASlaveShouldWaitOnHisMaster:
  1534.  
  1535.  move.l #KeyMap,a5
  1536.  tst.b $19(a5)
  1537.  sne SLAVEPAUSE
  1538.  
  1539.  
  1540.  move.w PLR2_energy,Energy
  1541.  
  1542.  jsr RECFIRST
  1543.  
  1544.  move.l PLR2s_xoff,p2_xoff
  1545.  move.l PLR2s_zoff,p2_zoff
  1546.  move.l PLR2s_yoff,p2_yoff
  1547.  move.l PLR2s_height,p2_height
  1548.  move.w PLR2s_angpos,p2_angpos
  1549.  move.w PLR2_bobble,p2_bobble
  1550.  move.b PLR2_clicked,p2_clicked
  1551.  clr.b PLR2_clicked
  1552.  move.b PLR2_fire,p2_fire
  1553.  move.b PLR2_SPCTAP,p2_spctap
  1554.  clr.b PLR2_SPCTAP
  1555.  move.b PLR2_Ducked,p2_ducked
  1556.  move.b PLR2_GunSelected,p2_gunselected
  1557.  
  1558.  move.l p2_xoff,d0
  1559.  jsr RECFIRST
  1560.  move.l d0,p1_xoff
  1561.  
  1562.  move.l p2_zoff,d0
  1563.  jsr RECFIRST
  1564.  move.l d0,p1_zoff
  1565.  
  1566.  move.l p2_yoff,d0
  1567.  jsr RECFIRST
  1568.  move.l d0,p1_yoff
  1569.  
  1570.  move.l p2_height,d0
  1571.  jsr RECFIRST
  1572.  move.l d0,p1_height
  1573.  
  1574.  move.w p2_angpos,d0
  1575.  swap d0
  1576.  move.w p2_bobble,d0
  1577.  jsr RECFIRST
  1578.  move.w d0,p1_bobble
  1579.  swap d0
  1580.  move.w d0,p1_angpos
  1581.  
  1582.  
  1583.  move.b p2_spctap,d0
  1584.  lsl.w #8,d0
  1585.  move.b p2_clicked,d0
  1586.  jsr RECFIRST
  1587.  move.b d0,p1_clicked
  1588.  lsr.w #8,d0
  1589.  move.b d0,p1_spctap
  1590.  swap d0
  1591.  move.w d0,TempFrames
  1592.  
  1593.  
  1594.  move.b p2_ducked,d0
  1595.  lsl.w #8,d0
  1596.  move.b p2_gunselected,d0
  1597.  jsr RECFIRST
  1598.  move.b d0,p1_gunselected
  1599.  lsr.w #8,d0
  1600.  move.b d0,p1_ducked
  1601.  swap d0
  1602.  move.w d0,Rand1
  1603.  
  1604.  move.b p2_fire,d0
  1605.  lsl.w #8,d0
  1606.  move.b SLAVEQUITTING,d0
  1607.  or.b d0,MASTERQUITTING
  1608.  swap d0
  1609.  move.b SLAVEPAUSE,d0
  1610.  or.b d0,MASTERPAUSE
  1611.  jsr RECFIRST
  1612.  or.b d0,MASTERPAUSE
  1613.  or.b d0,SLAVEPAUSE
  1614.  swap d0
  1615.  or.b d0,SLAVEQUITTING
  1616.  or.b d0,MASTERQUITTING
  1617.  lsr.w #8,d0
  1618.  move.b d0,p1_fire
  1619.  
  1620.  
  1621.  bsr PLR1_Control
  1622.  bsr PLR2_Control
  1623.  move.w p2_xoff,THISPLRxoff
  1624.  move.w p2_zoff,THISPLRzoff
  1625.  move.l PLR2_Roompt,a0
  1626.  move.l ToZoneRoof(a0),SplitHeight
  1627.  
  1628. donetalking:
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  move.l #ZoneBrightTable,a1
  1634.  move.l ZoneAdds,a2
  1635.  move.l PLR2_ListOfGraphRooms,a0
  1636.  move.l PLR2_PointsToRotatePtr,a5
  1637.  cmp.b #'s',mors
  1638.  beq.s doallz
  1639.  move.l PLR1_ListOfGraphRooms,a0
  1640.  move.l PLR1_PointsToRotatePtr,a5
  1641.  
  1642. doallz
  1643.  move.w (a0),d0
  1644.  blt.s doneallz
  1645.  addq.w #8,a0
  1646.  
  1647.  move.l (a2,d0.w*4),a3
  1648.  add.l LEVELDATA,a3
  1649.  move.w ToZoneBrightness(a3),d2
  1650.  
  1651.  blt.s justbright
  1652.  move.w d2,d3
  1653.  lsr.w #8,d3
  1654.  tst.b d3
  1655.  beq.s justbright
  1656.  
  1657.  move.l #BrightAnimTable,a4
  1658.  move.w -2(a4,d3.w*2),d2
  1659.  
  1660. justbright:
  1661.  move.w d2,(a1,d0.w*4)
  1662.  
  1663.  move.w ToUpperBrightness(a3),d2
  1664.  
  1665.  blt.s justbright2
  1666.  move.w d2,d3
  1667.  lsr.w #8,d3
  1668.  tst.b d3
  1669.  beq.s justbright2
  1670.  
  1671.  move.l #BrightAnimTable,a4
  1672.  move.w -2(a4,d3.w*2),d2
  1673.  
  1674. justbright2:
  1675.  move.w d2,2(a1,d0.w*4)
  1676.  
  1677.  bra.b doallz
  1678.  
  1679. doneallz:
  1680.  
  1681.  move.l PointBrights,a2
  1682.  move.l #CurrentPointBrights,a3
  1683. justtheone:
  1684.  move.w (a5)+,d0
  1685.  blt.s whythehell
  1686.  move.w (a2,d0.w*4),d2
  1687.  
  1688.  tst.b d2
  1689.  blt.s .justbright
  1690.  move.w d2,d3
  1691.  lsr.w #8,d3
  1692.  tst.b d3
  1693.  beq.s .justbright
  1694.  
  1695.  move.w d3,d4
  1696.  and.w #$f,d3
  1697.  lsr.w #4,d4
  1698.  addq.w #1,d4
  1699.  
  1700.  move.l #BrightAnimTable,a0
  1701.  move.w -2(a0,d3.w*2),d3
  1702.  ext.w d2
  1703.  sub.w d2,d3
  1704.  muls d4,d3
  1705.  asr.w #4,d3
  1706.  add.w d3,d2
  1707.  
  1708. .justbright:
  1709.  ext.w d2
  1710.  
  1711.  move.w d2,(a3,d0.w*4)
  1712.  move.w 2(a2,d0.w*4),d2
  1713.  
  1714.  tst.b d2
  1715.  blt.s .justbright2
  1716.  move.w d2,d3
  1717.  lsr.w #8,d3
  1718.  tst.b d3
  1719.  beq.s .justbright2
  1720.  
  1721.  move.w d3,d4
  1722.  and.w #$f,d3
  1723.  lsr.w #4,d4
  1724.  addq.w #1,d4
  1725.  
  1726.  move.l #BrightAnimTable,a0
  1727.  move.w -2(a0,d3.w*2),d3
  1728.  ext.w d2
  1729.  sub.w d2,d3
  1730.  muls d4,d3
  1731.  asr.w #4,d3
  1732.  add.w d3,d2
  1733.  
  1734. .justbright2:
  1735.  ext.w d2
  1736.  
  1737.  move.w d2,2(a3,d0.w*4)
  1738.  
  1739.  bra.s justtheone
  1740.  
  1741. whythehell:
  1742.  
  1743.  cmp.b #'n',mors
  1744.  beq nosee
  1745.  
  1746.  move.l PLR1_Roompt,FromRoom
  1747.  move.l PLR2_Roompt,ToRoom
  1748.  move.w p1_xoff,Viewerx
  1749.  move.w p1_zoff,Viewerz
  1750.  move.l p1_yoff,d0
  1751.  asr.l #7,d0
  1752.  move.w d0,Viewery
  1753.  move.w p2_xoff,Targetx
  1754.  move.w p2_zoff,Targetz
  1755.  move.l p2_yoff,d0
  1756.  asr.l #7,d0
  1757.  move.w d0,Targety
  1758.  move.b PLR1_StoodInTop,ViewerTop
  1759.  move.b PLR2_StoodInTop,TargetTop
  1760.  jsr CanItBeSeen
  1761.  
  1762.  move.l PLR1_Obj,a0
  1763.  move.b CanSee,d0
  1764.  and.b #2,d0
  1765.  move.b d0,17(a0)
  1766.  move.l PLR2_Obj,a0
  1767.  move.b CanSee,d0
  1768.  and.b #1,d0
  1769.  move.b d0,17(a0)
  1770.  
  1771. nosee:
  1772.  
  1773.  move.l PLR1_Obj,a0
  1774.  move.b #5,16(a0)
  1775.  move.l PLR2_Obj,a0
  1776.  move.b #11,16(a0)
  1777.  
  1778.  move.w TempFrames,d0
  1779.  add.w d0,p1_holddown
  1780.  cmp.w #30,p1_holddown
  1781.  blt.s oklength
  1782.  move.w #30,p1_holddown
  1783. oklength:
  1784.  
  1785.  tst.b p1_fire
  1786.  bne.s okstillheld
  1787.  sub.w d0,p1_holddown
  1788.  bge.s okstillheld
  1789.  move.w #0,p1_holddown
  1790.  
  1791. okstillheld:
  1792.  
  1793.  move.w TempFrames,d0
  1794.  add.w d0,p2_holddown
  1795.  
  1796.  cmp.w #30,p2_holddown
  1797.  blt.s oklength2
  1798.  move.w #30,p2_holddown
  1799. oklength2:
  1800.  
  1801.  
  1802.  tst.b p2_fire
  1803.  bne.s okstillheld2
  1804.  sub.w d0,p2_holddown
  1805.  bge.s okstillheld2
  1806.  move.w #0,p2_holddown
  1807. okstillheld2:
  1808.  
  1809. ; move.l #PLR1_GunData,a1
  1810. ; move.w p1_holddown,d0
  1811. ; move.w #50,10+32*3(a1)
  1812. ; move.l #PLR2_GunData,a1
  1813. ; move.w p2_holddown,d0
  1814. ; move.w #50,10+32*3(a1)
  1815.  
  1816.  
  1817. ******************************************
  1818. ******************************************
  1819.  
  1820.  move.w TempFrames,d1
  1821.  bgt.s noze
  1822.  moveq #1,d1
  1823. noze:
  1824.  
  1825.  move.w PLR1_xoff,d0
  1826.  sub.w OLDX1,d0
  1827.  asl.w #4,d0
  1828.  ext.l d0
  1829.  divs d1,d0
  1830.  move.w d0,XDIFF1
  1831.  move.w PLR2_xoff,d0
  1832.  sub.w OLDX2,d0
  1833.  asl.w #4,d0
  1834.  ext.l d0
  1835.  divs d1,d0
  1836.  move.w d0,XDIFF2
  1837.  move.w PLR1_zoff,d0
  1838.  sub.w OLDZ1,d0
  1839.  asl.w #4,d0
  1840.  ext.l d0
  1841.  divs d1,d0
  1842.  move.w d0,ZDIFF1
  1843.  move.w PLR2_zoff,d0
  1844.  sub.w OLDZ2,d0
  1845.  asl.w #4,d0
  1846.  ext.l d0
  1847.  divs d1,d0
  1848.  move.w d0,ZDIFF2
  1849.  
  1850.  cmp.b #'s',mors
  1851.  beq.s ImPlayer2OhYesIAm
  1852.  bsr USEPLR1
  1853.  bra.b IWasPlayer1
  1854.  
  1855. ImPlayer2OhYesIAm:
  1856.  bsr USEPLR2
  1857. IWasPlayer1:
  1858.  
  1859.  
  1860.  cmp.b #'s',mors
  1861.  beq drawplayer2
  1862.  
  1863.  move.w #0,scaleval
  1864.  
  1865.  move.l PLR1_xoff,xoff
  1866.  move.l PLR1_yoff,yoff
  1867.  move.l PLR1_zoff,zoff
  1868.  move.w PLR1_angpos,angpos
  1869.  move.w PLR1_cosval,cosval
  1870.  move.w PLR1_sinval,sinval
  1871.  
  1872.  
  1873.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1874.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1875.  move.l PLR1_Roompt,Roompt
  1876.  
  1877.  bsr OrderZones
  1878.  jsr objmoveanim
  1879.  bsr EnergyBar
  1880.  bsr AmmoBar
  1881.  
  1882.  move.w #0,leftclip
  1883.  move.w #96,rightclip
  1884.  move.w #0,deftopclip
  1885.  
  1886.  move.w #79,defbotclip
  1887.  move.w #0,topclip
  1888.  move.w #79,botclip
  1889. ; sub.l #10*104*4,frompt
  1890. ; sub.l #10*104*4,midpt
  1891.  
  1892. * Subroom loop
  1893.  
  1894.  
  1895.  bsr DrawDisplay 
  1896.  
  1897.  bra nodrawp2
  1898.  
  1899. drawplayer2
  1900.  
  1901.  move.w #0,scaleval
  1902.  move.l PLR2_xoff,xoff
  1903.  move.l PLR2_yoff,yoff
  1904.  move.l PLR2_zoff,zoff
  1905.  move.w PLR2_angpos,angpos
  1906.  move.w PLR2_cosval,cosval
  1907.  move.w PLR2_sinval,sinval 
  1908.  
  1909.  
  1910.  
  1911.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1912.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1913.  move.l PLR2_Roompt,Roompt
  1914.  
  1915.  bsr OrderZones
  1916.  jsr objmoveanim
  1917.  bsr EnergyBar
  1918.  bsr AmmoBar
  1919.  
  1920.  move.w #0,leftclip
  1921.  move.w #96,rightclip
  1922.  move.w #0,deftopclip
  1923.  move.w #79,defbotclip
  1924.  move.w #0,topclip
  1925.  move.w #79,botclip
  1926.  
  1927.  bsr DrawDisplay
  1928.  
  1929. nodrawp2:
  1930.  
  1931. ***************************************** 
  1932. * Copy from copbuff to chip ram
  1933.  
  1934.  
  1935. ; move.l drawpt,a3
  1936. ; adda.w #10,a3
  1937. ; move.l COPSCRNBUFF,a2
  1938. ; move.w #2,d6
  1939. ; adda.w #10,a2
  1940. ;COPYOUT
  1941. ; move.w #31,d0
  1942. ;COPYDOWN1:
  1943. ; move.w #3,d1
  1944. ; move.l a2,a4
  1945. ; move.l a3,a5
  1946. ;.inlop1:
  1947. ;val SET 0
  1948. ; REPT 20
  1949. ; move.w val(a4),val(a5)
  1950. ;val SET val+104*4
  1951. ; ENDR
  1952. ; adda.l #104*4*20,a4
  1953. ; adda.l #104*4*20,a5
  1954. ; dbra d1,.inlop1
  1955. ; addq #4,a2
  1956. ; addq #4,a3
  1957. ; dbra d0,COPYDOWN1
  1958. ; addq #4,a2
  1959. ; addq #4,a3
  1960. ; dbra d6,COPYOUT 
  1961.  
  1962.  
  1963. ***************************************** 
  1964.  move.l PLR2_Roompt,a0
  1965.  move.l #WorkSpace,a1
  1966.  clr.l (a1)
  1967.  clr.l 4(a1)
  1968.  clr.l 8(a1)
  1969.  clr.l 12(a1)
  1970.  clr.l 16(a1)
  1971.  clr.l 20(a1)
  1972.  clr.l 24(a1)
  1973.  clr.l 28(a1)
  1974.  
  1975.  cmp.b #'n',mors
  1976.  beq.s plr1only
  1977.  
  1978.  lea ToListOfGraph(a0),a0
  1979. .doallrooms:
  1980.  move.w (a0),d0
  1981.  blt.s .allroomsdone
  1982.  addq #8,a0
  1983.  move.w d0,d1
  1984.  asr.w #3,d0
  1985.  bset d1,(a1,d0.w)
  1986.  bra.b .doallrooms
  1987. .allroomsdone:
  1988.  
  1989. plr1only:
  1990.  
  1991.  move.l PLR1_Roompt,a0
  1992.  lea ToListOfGraph(a0),a0
  1993. .doallrooms2:
  1994.  move.w (a0),d0
  1995.  blt.s .allroomsdone2
  1996.  addq #8,a0
  1997.  move.w d0,d1
  1998.  asr.w #3,d0
  1999.  bset d1,(a1,d0.w)
  2000.  bra.b .doallrooms2
  2001. .allroomsdone2:
  2002.  
  2003.  move.l ObjectData,a0
  2004.  lea 64(a0),a0
  2005. .doallobs:
  2006.  lea 64(a0),a0
  2007.  move.w (a0),d0
  2008.  blt.s .allobsdone
  2009.  move.w 12(a0),d0
  2010.  blt.s .doallobs
  2011.  move.w d0,d1
  2012.  asr.w #3,d0
  2013.  btst d1,(a1,d0.w)
  2014.  beq.s .doallobs
  2015.  or.b #127,worry(a0)
  2016.  bra.s .doallobs
  2017. .allobsdone:
  2018.  
  2019.  
  2020.  
  2021. ; move.l #brightentab,a0
  2022. ; move.l frompt,a3
  2023. ; adda.w #(4*33)+(104*4*20),a3
  2024. ; move.w #20,d7
  2025. ; move.w #20,d6
  2026. ;horl:
  2027. ; move.w d6,d5
  2028. ; move.l a3,a1
  2029. ;vertl
  2030. ; move.w (a1),d0
  2031. ; move.w (a0,d0.w*2),(a1)
  2032. ; addq #4,a1
  2033. ; dbra d5,vertl
  2034. ; adda.w #104*4,a3
  2035. ; dbra d7,horl
  2036.  
  2037.  move.l #$dff000,a6
  2038.  
  2039. ; move.w #$300,col0(a6)
  2040.  
  2041.  move.l #KeyMap,a5
  2042.  tst.b $45(a5)
  2043.  beq.s noend
  2044.  
  2045.  cmp.b #'s',mors
  2046.  beq.b plr2quit 
  2047.  
  2048.  st MASTERQUITTING
  2049.  bra.b noend
  2050.  
  2051. plr2quit:
  2052.  st SLAVEQUITTING
  2053. noend:
  2054.  
  2055.  tst.b MASTERQUITTING
  2056.  beq.s .noquit
  2057.  tst.b SLAVEQUITTING
  2058.  bne endnomusic
  2059. .noquit
  2060.  
  2061.  cmp.b #'n',mors
  2062.  bne.s .noexit
  2063.  move.l PLR1_Roompt,a0
  2064.  move.w (a0),d0
  2065.  move.w PLOPT,d1
  2066.  move.l #ENDZONES,a0
  2067.  cmp.w (a0,d1.w*2),d0
  2068.  beq end
  2069. .noexit:
  2070.  
  2071.  tst.w PLR1_energy
  2072.  ble end
  2073.  tst.w PLR2_energy
  2074.  ble end
  2075.  
  2076. ; move.l SwitchData,a0
  2077. ; tst.b 24+8(a0)
  2078. ; bne end
  2079.   
  2080.  JSR STOPTIMER
  2081.  
  2082.  bra lop
  2083.  
  2084. MASTERQUITTING: dc.b 0
  2085. SLAVEQUITTING: dc.b 0
  2086. MASTERPAUSE: dc.b 0
  2087. SLAVEPAUSE: dc.b 0
  2088.  
  2089. PAUSEOPTS:
  2090.  include "ab3:source/pauseopts"
  2091.  
  2092. ENDZONES:
  2093. ; LEVEL 1
  2094.  dc.w 132
  2095. ; LEVEL 2
  2096.  dc.w 149
  2097. ; LEVEL 3
  2098.  dc.w 155
  2099. ; LEVEL 4
  2100.  dc.w 107
  2101. ; LEVEL 5
  2102.  dc.w 67
  2103. ; LEVEL 6
  2104.  dc.w 132
  2105. ; LEVEL 7
  2106.  dc.w 203
  2107. ; LEVEL 8
  2108.  dc.w 166
  2109. ; LEVEL 9
  2110.  dc.w 118
  2111. ; LEVEL 10
  2112.  dc.w 102
  2113. ; LEVEL 11
  2114.  dc.w 103
  2115. ; LEVEL 12
  2116.  dc.w 2
  2117. ; LEVEL 13
  2118.  dc.w 98
  2119. ; LEVEL 14
  2120.  dc.w 0
  2121. ; LEVEL 15
  2122.  dc.w 148
  2123. ; LEVEL 16
  2124.  dc.w 103
  2125.  
  2126. ***************************************************************************
  2127. ***************************************************************************
  2128. ****************** End of Main Loop here ********************************** 
  2129. ***************************************************************************
  2130. ***************************************************************************
  2131.  
  2132. putinsmallscr:
  2133.  move.l #$1fe0000,statskip
  2134.  move.l #$1fe0000,statskip+4
  2135.  
  2136.  move.l #healthpal,a5
  2137.  move.l COPSCRN1,a0
  2138.  move.l COPSCRN2,a2
  2139.  move.w #scrheight-1,d0
  2140.  moveq #0,d6
  2141.  move.w #0,d3
  2142.  move.w #$2bdf,startwait
  2143.  move.w #$2d01,endwait
  2144. .fillcop
  2145.  move.w #$180,d1
  2146.  
  2147.  move.l a0,a1
  2148.  move.l a2,a3
  2149.  move.w #$10c,(a1)+
  2150.  move.w #$10c,(a3)+
  2151.  move.w d3,(a1)+
  2152.  move.w d3,(a3)+
  2153.  eor.w #$8000,d3
  2154.  
  2155.  move.w #$106,(a1)+
  2156.  move.w #$106,(a3)+
  2157.  move.w #$2c42,d5
  2158.  or.w d3,d5
  2159.  and.w #$fffe,d5
  2160.  move.w d5,(a1)+
  2161.  move.w d5,(a3)+
  2162.  bsr do32
  2163.  
  2164.  move.w #$106,(a1)+
  2165.  move.w #$106,(a3)+
  2166.  move.w #$4c42,d5
  2167.  or.w d3,d5
  2168.  and.w #$fffe,d5
  2169.  move.w d5,(a1)+
  2170.  move.w d5,(a3)+
  2171.  bsr do32
  2172.  
  2173.  move.w #$106,(a1)+
  2174.  move.w #$106,(a3)+
  2175.  move.w #$6c42,d5
  2176.  or.w d3,d5
  2177.  and.w #$fffe,d5
  2178.  move.w d5,(a1)+
  2179.  move.w d5,(a3)+
  2180.  bsr do32
  2181.  
  2182.  
  2183.  move.l #$1060c42,(a1)+
  2184.  move.l #$1060c42,(a3)+
  2185.  move.w #$19e,(a1)+
  2186.  move.w (a5),(a1)+
  2187.  move.w #$19e,(a3)+
  2188.  move.w (a5)+,(a3)+
  2189.  
  2190. **********************************
  2191.  
  2192.  adda.w #104*4,a0
  2193.  adda.w #104*4,a2
  2194.  dbra d0,.fillcop
  2195.  
  2196.  move.w #$48,fetchstart
  2197.  move.w #$88,fetchstop
  2198.  move.w #$2cb1,winstart
  2199.  move.w #$2c91,winstop
  2200.  move.w #-24,modulo
  2201.  move.w #-24,modulo+4
  2202.  
  2203.  move.l #nullspr,d0
  2204.  move.w d0,s4l
  2205.  move.w d0,s5l
  2206.  move.w d0,s6l
  2207.  move.w d0,s7l
  2208.  swap d0
  2209.  move.w d0,s4h
  2210.  move.w d0,s5h
  2211.  move.w d0,s6h
  2212.  move.w d0,s7h 
  2213.  
  2214.  move.l #borders,d0
  2215.  move.w d0,s0l
  2216.  swap d0
  2217.  move.w d0,s0h
  2218.  move.l #borders+2592,d0
  2219.  move.w d0,s1l
  2220.  swap d0
  2221.  move.w d0,s1h
  2222.  move.l #borders+2592*2,d0
  2223.  move.w d0,s2l
  2224.  swap d0
  2225.  move.w d0,s2h
  2226.  move.l #borders+2592*3,d0
  2227.  move.w d0,s3l
  2228.  swap d0
  2229.  move.w d0,s3h
  2230.  
  2231.  
  2232.  move.l #scrn+40,a0
  2233.  move.l #scrn+160,a1
  2234.  move.l #scrn+280,a2
  2235.  move.l #smallscrntab,a3
  2236.  move.w #191,d7    ; counter
  2237.  move.w #0,d1    ; xpos
  2238. .plotscrnloop:
  2239.  move.b (a3)+,d0
  2240.  move.w d1,d2
  2241.  asr.w #3,d2
  2242.  move.b d1,d3
  2243.  not.b d3
  2244.  bclr.b d3,-40(a0,d2.w)
  2245.  bclr.b d3,(a0,d2.w)
  2246.  bclr.b d3,40(a0,d2.w)
  2247.  bclr.b d3,-40(a1,d2.w)
  2248.  bclr.b d3,(a1,d2.w)
  2249.  bclr.b d3,40(a1,d2.w)
  2250.  bclr.b d3,-40(a2,d2.w)
  2251.  btst #0,d0
  2252.  beq.s .nobp1
  2253.  bset.b d3,-40(a0,d2.w)
  2254. .nobp1:
  2255.  btst #1,d0
  2256.  beq.s .nobp2
  2257.  bset.b d3,(a0,d2.w)
  2258. .nobp2:
  2259.  btst #2,d0
  2260.  beq.s .nobp3
  2261.  bset.b d3,40(a0,d2.w)
  2262. .nobp3:
  2263.  btst #3,d0
  2264.  beq.s .nobp4
  2265.  bset.b d3,-40(a1,d2.w)
  2266. .nobp4:
  2267.  btst #4,d0
  2268.  beq.s .nobp5
  2269.  bset.b d3,(a1,d2.w)
  2270. .nobp5:
  2271.  btst #5,d0
  2272.  beq.s .nobp6
  2273.  bset.b d3,40(a1,d2.w)
  2274. .nobp6:
  2275.  btst #6,d0
  2276.  beq.s .nobp7
  2277.  bset.b d3,-40(a2,d2.w)
  2278. .nobp7:
  2279.  
  2280.  addq #1,d1
  2281.  
  2282.  dbra d7,.plotscrnloop
  2283.  
  2284.  
  2285.  rts
  2286.  
  2287. putinlargescr:
  2288.  
  2289.  move.l #$1000000,statskip
  2290.  move.l #$fffffffe,statskip+4
  2291.  
  2292.  move.l #healthpal,a5
  2293.  move.l COPSCRN1,a0
  2294.  move.l COPSCRN2,a2
  2295.  move.w #scrheight-1,d0
  2296.  moveq #0,d6
  2297.  move.w #0,d3
  2298.  move.w #$29df,startwait
  2299.  move.w #$2b01,endwait
  2300. .fillcop
  2301.  move.w #$180,d1
  2302.  
  2303.  move.l a0,a1
  2304.  move.l a2,a3
  2305.  move.w #$10c,(a1)+
  2306.  move.w #$10c,(a3)+
  2307.  move.w d3,(a1)+
  2308.  move.w d3,(a3)+
  2309.  eor.w #$8000,d3
  2310.  
  2311.  move.w #$106,(a1)+
  2312.  move.w #$106,(a3)+
  2313.  move.w #$2c42,d5
  2314.  or.w d3,d5
  2315.  and.w #$fffe,d5
  2316.  move.w d5,(a1)+
  2317.  move.w d5,(a3)+
  2318.  bsr do32
  2319.  
  2320.  move.w #$106,(a1)+
  2321.  move.w #$106,(a3)+
  2322.  move.w #$4c42,d5
  2323.  or.w d3,d5
  2324.  and.w #$fffe,d5
  2325.  move.w d5,(a1)+
  2326.  move.w d5,(a3)+
  2327.  bsr do32
  2328.  
  2329.  move.w #$106,(a1)+
  2330.  move.w #$106,(a3)+
  2331.  move.w #$6c42,d5
  2332.  or.w d3,d5
  2333.  and.w #$fffe,d5
  2334.  move.w d5,(a1)+
  2335.  move.w d5,(a3)+
  2336.  bsr do32
  2337.  
  2338.  move.w startwait,(a1)+
  2339.  move.w #$fffe,(a1)+
  2340.  move.w endwait,(a1)+
  2341.  move.w #$ff00,(a1)+
  2342.  move.w startwait,(a3)+
  2343.  move.w #$fffe,(a3)+
  2344.  move.w endwait,(a3)+
  2345.  move.w #$ff00,(a3)+
  2346.  
  2347. ; move.l $1fe0000,(a1)+
  2348. ; move.l $1fe0000,(a3)+
  2349. ; move.l $1fe0000,(a1)+
  2350. ; move.l $1fe0000,(a3)+
  2351.  
  2352.  
  2353.  add.w #$300,startwait
  2354.  add.w #$300,endwait
  2355.  
  2356. ; move.l #$1060c42,(a1)+
  2357. ; move.l #$1060c42,(a3)+
  2358. ; move.w #$19e,(a1)+
  2359. ; move.w (a5),(a1)+
  2360. ; move.w #$19e,(a3)+
  2361. ; move.w (a5)+,(a3)+
  2362.  
  2363. **********************************
  2364.  
  2365.  adda.w #104*4,a0
  2366.  adda.w #104*4,a2
  2367.  dbra d0,.fillcop
  2368.  
  2369.  move.w #$38,fetchstart
  2370.  move.w #$b8,fetchstop
  2371.  move.w #$2c81,winstart
  2372.  move.w #$2cc1,winstop
  2373.  move.w #-40,modulo
  2374.  move.w #-40,modulo+4
  2375.  
  2376.  move.l #nullspr,d0
  2377.  move.w d0,s0l
  2378.  move.w d0,s1l
  2379.  move.w d0,s2l
  2380.  move.w d0,s3l
  2381.  move.w d0,s4l
  2382.  move.w d0,s5l
  2383.  move.w d0,s6l
  2384.  move.w d0,s7l
  2385.  swap d0
  2386.  move.w d0,s0h
  2387.  move.w d0,s1h
  2388.  move.w d0,s2h
  2389.  move.w d0,s3h
  2390.  move.w d0,s4h
  2391.  move.w d0,s5h
  2392.  move.w d0,s6h
  2393.  move.w d0,s7h 
  2394.  
  2395.  move.l #scrn+40,a0
  2396.  move.l #scrn+160,a1
  2397.  move.l #scrn+280,a2
  2398.  move.l #scrntab,a3
  2399.  move.w #319,d7    ; counter
  2400.  move.w #0,d1    ; xpos
  2401. .plotscrnloop:
  2402.  move.b (a3)+,d0
  2403.  move.w d1,d2
  2404.  asr.w #3,d2
  2405.  move.b d1,d3
  2406.  not.b d3
  2407.  bclr.b d3,-40(a0,d2.w)
  2408.  bclr.b d3,(a0,d2.w)
  2409.  bclr.b d3,40(a0,d2.w)
  2410.  bclr.b d3,-40(a1,d2.w)
  2411.  bclr.b d3,(a1,d2.w)
  2412.  bclr.b d3,40(a1,d2.w)
  2413.  bclr.b d3,-40(a2,d2.w)
  2414.  btst #0,d0
  2415.  beq.s .nobp1
  2416.  bset.b d3,-40(a0,d2.w)
  2417. .nobp1:
  2418.  btst #1,d0
  2419.  beq.s .nobp2
  2420.  bset.b d3,(a0,d2.w)
  2421. .nobp2:
  2422.  btst #2,d0
  2423.  beq.s .nobp3
  2424.  bset.b d3,40(a0,d2.w)
  2425. .nobp3:
  2426.  btst #3,d0
  2427.  beq.s .nobp4
  2428.  bset.b d3,-40(a1,d2.w)
  2429. .nobp4:
  2430.  btst #4,d0
  2431.  beq.s .nobp5
  2432.  bset.b d3,(a1,d2.w)
  2433. .nobp5:
  2434.  btst #5,d0
  2435.  beq.s .nobp6
  2436.  bset.b d3,40(a1,d2.w)
  2437. .nobp6:
  2438.  btst #6,d0
  2439.  beq.s .nobp7
  2440.  bset.b d3,-40(a2,d2.w)
  2441. .nobp7:
  2442.  
  2443.  addq #1,d1
  2444.  
  2445.  dbra d7,.plotscrnloop
  2446.  
  2447.  rts
  2448.  
  2449. CLEARKEYBOARD:
  2450.  move.l #KeyMap,a5
  2451.  moveq #0,d0
  2452.  move.w #15,d1
  2453. clrloo:
  2454.  move.l d0,(a5)+
  2455.  move.l d0,(a5)+
  2456.  move.l d0,(a5)+
  2457.  move.l d0,(a5)+
  2458.  dbra d1,clrloo
  2459.  rts
  2460.  
  2461. READCONTROLS: dc.w 0
  2462.  
  2463. tstststst: dc.w 0
  2464.  
  2465. BollocksRoom:
  2466.  dc.w -1
  2467.  ds.l 50
  2468.  
  2469. GUNYOFFS:
  2470.  dc.w 20
  2471.  dc.w 20
  2472.  dc.w 0
  2473.  dc.w 20
  2474.  dc.w 20
  2475.  dc.w 0
  2476.  dc.w 0
  2477.  dc.w 20
  2478.  
  2479. USEPLR1:
  2480.  
  2481. ***********************************
  2482.  
  2483.  move.l PLR1_Obj,a0 
  2484.  move.l ObjectPoints,a1
  2485.  move.l #ObjRotated,a2
  2486.  move.w (a0),d0
  2487.  move.l PLR1_xoff,(a1,d0.w*8)
  2488.  move.l PLR1_zoff,4(a1,d0.w*8)
  2489.  move.l PLR1_Roompt,a1
  2490.  
  2491.  moveq #0,d2
  2492.  move.b damagetaken(a0),d2
  2493.  beq.b .notbeenshot
  2494.  move.w #$f00,hitcol
  2495.  move.w #$f00,hitcol2
  2496.  sub.w d2,PLR1_energy
  2497.  movem.l d0-d7/a0-a6,-(a7)
  2498.  move.b #$fb,IDNUM
  2499.  move.w #19,Samplenum
  2500.  clr.b notifplaying
  2501.  move.w #0,Noisex
  2502.  move.w #0,Noisez
  2503.  move.w #100,Noisevol
  2504.  jsr MakeSomeNoise
  2505.  
  2506.  movem.l (a7)+,d0-d7/a0-a6
  2507.  
  2508. .notbeenshot
  2509.  move.b #0,damagetaken(a0)
  2510.  move.b PLR1_energy+1,numlives(a0)
  2511.  
  2512.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2513.  
  2514.  move.w (a1),12(a0)
  2515.  move.w (a1),d2
  2516.  move.l #ZoneBrightTable,a1
  2517.  move.l (a1,d2.w*4),d2
  2518.  tst.b PLR1_StoodInTop
  2519.  bne.s .okinbott
  2520.  swap d2
  2521. .okinbott:
  2522.  
  2523.  move.w d2,2(a0)
  2524.  
  2525.  move.l p1_yoff,d0
  2526.  move.l p1_height,d1
  2527.  asr.l #1,d1
  2528.  add.l d1,d0
  2529.  asr.l #7,d0
  2530.  move.w d0,4(a0)
  2531.  
  2532. ***********************************
  2533.  
  2534.  move.l PLR2_Obj,a0 
  2535.  
  2536.  move.w PLR2_angpos,d0
  2537.  and.w #8190,d0
  2538.  move.w d0,Facing(a0)
  2539.  
  2540.  jsr ViewpointToDraw
  2541.  asl.w #2,d0
  2542.  moveq #0,d1
  2543.  move.b p2_bobble,d1
  2544.  not.b d1
  2545.  lsr.b #3,d1
  2546.  and.b #$3,d1
  2547.  add.w d1,d0
  2548.  move.w d0,10(a0)
  2549.  move.w #10,8(a0)
  2550.  
  2551.  move.l ObjectPoints,a1
  2552.  move.l #ObjRotated,a2
  2553.  move.w (a0),d0
  2554.  move.l PLR2_xoff,(a1,d0.w*8)
  2555.  move.l PLR2_zoff,4(a1,d0.w*8)
  2556.  move.l PLR2_Roompt,a1
  2557.  
  2558.  moveq #0,d2
  2559.  move.b damagetaken(a0),d2
  2560.  beq.b .notbeenshot2
  2561.  sub.w d2,PLR2_energy
  2562. .notbeenshot2
  2563.  move.b #0,damagetaken(a0)
  2564.  move.b PLR2_energy+1,numlives(a0)
  2565.  
  2566.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2567.  
  2568.  move.w (a1),12(a0)
  2569.  move.w (a1),d2
  2570.  move.l #ZoneBrightTable,a1
  2571.  move.l (a1,d2.w*4),d2
  2572.  tst.b PLR2_StoodInTop
  2573.  bne.s .okinbott2
  2574.  swap d2
  2575. .okinbott2:
  2576.  
  2577.  move.w d2,2(a0)
  2578.  
  2579.  move.l p2_yoff,d0
  2580.  move.l p2_height,d1
  2581.  asr.l #1,d1
  2582.  add.l d1,d0
  2583.  asr.l #7,d0
  2584.  move.w d0,4(a0)
  2585.  
  2586. **********************************
  2587.  
  2588.  
  2589.  move.l PLR1_Obj,a0
  2590.  move.w #-1,12+128(a0)
  2591.  
  2592.  rts
  2593.  
  2594. DRAWINGUN:
  2595.  move.l #Objects+9*16,a0
  2596.  move.l 4(a0),a5    ; ptr
  2597.  move.l 8(a0),a2    ; frames
  2598.  move.l 12(a0),a4    ; pal
  2599.  move.l (a0),a0        ; wad
  2600.  
  2601.  move.l #GunAnims,a1
  2602.  move.l (a1,d0.w*8),a1
  2603.  move.w (a1,d1.w*2),d5    ; frame of anim
  2604.  
  2605.  move.l #GUNYOFFS,a1
  2606.  move.w (a1,d0.w*2),d7    ; yoff
  2607.  move.l frompt,a6
  2608.  move.w d7,d6
  2609.  muls #104*4,d6
  2610.  add.l d6,a6    ; screen pointer
  2611.  
  2612.  asl.w #2,d0
  2613.  add.w d5,d0    ; frame
  2614.  move.w (a2,d0.w*4),d1    ; xoff
  2615.  
  2616.  lea (a5,d1.w),a5    ; right ptr
  2617.  
  2618.  move.w #31,d0
  2619.  bsr.b DRAWCHUNK
  2620.  addq.w #4,a6
  2621.  move.w #31,d0
  2622.  bsr.b DRAWCHUNK
  2623.  addq.w #4,a6
  2624.  move.w #31,d0
  2625.  bsr.b DRAWCHUNK
  2626.  rts
  2627.  
  2628.  
  2629. DRAWCHUNK:
  2630.  move.w #78,d3
  2631.  sub.w d7,d3
  2632.  move.l a6,a3
  2633.  move.b (a5),d2
  2634.  move.l (a5)+,d1
  2635.  bne.s .noblank
  2636.  addq #4,a6
  2637.  dbra d0,DRAWCHUNK 
  2638.  rts
  2639.  
  2640. .noblank:
  2641.  and.l #$ffffff,d1
  2642.  lea (a0,d1.l),a1
  2643.  cmp.b #1,d2
  2644.  bgt.s thirdd
  2645.  beq.s secc
  2646. .drawdown:
  2647.  move.w (a1)+,d2
  2648.  and.w #%11111,d2
  2649.  beq.s .itsblank
  2650.  move.w (a4,d2.w*2),(a3)
  2651. .itsblank
  2652.  lea 104*4(a3),a3
  2653.  dbra d3,.drawdown
  2654.  
  2655.  addq #4,a6
  2656.  dbra d0,DRAWCHUNK
  2657.  rts
  2658.  
  2659. secc:
  2660. .drawdown:
  2661.  move.w (a1)+,d2
  2662.  lsr.w #5,d2
  2663.  and.w #%11111,d2
  2664.  beq.s .itsblank
  2665.  move.w (a4,d2.w*2),(a3)
  2666. .itsblank
  2667.  lea 104*4(a3),a3
  2668.  dbra d3,.drawdown
  2669.  
  2670.  addq #4,a6
  2671.  dbra d0,DRAWCHUNK
  2672.  rts
  2673.  
  2674. thirdd:
  2675. .drawdown:
  2676.  move.b (a1),d2
  2677.  addq #2,a1
  2678.  lsr.b #2,d2
  2679.  and.w #%11111,d2
  2680.  beq.s .itsblank
  2681.  move.w (a4,d2.w*2),(a3)
  2682. .itsblank
  2683.  lea 104*4(a3),a3
  2684.  dbra d3,.drawdown
  2685.  
  2686.  addq #4,a6
  2687.  dbra d0,DRAWCHUNK
  2688.  rts
  2689.  
  2690.  
  2691.  
  2692. ***************************************************
  2693. **************************************************
  2694.  
  2695. USEPLR2:
  2696.  
  2697.  PROTKCHECK a0
  2698.  
  2699. ***********************************
  2700.  
  2701.  move.l PLR2_Obj,a0 
  2702.  move.l ObjectPoints,a1
  2703.  move.l #ObjRotated,a2
  2704.  move.w (a0),d0
  2705.  move.l PLR2_xoff,(a1,d0.w*8)
  2706.  move.l PLR2_zoff,4(a1,d0.w*8)
  2707.  move.l PLR2_Roompt,a1
  2708.  
  2709.  moveq #0,d2
  2710.  move.b damagetaken(a0),d2
  2711.  beq.b .notbeenshot
  2712.  move.w #$f00,hitcol
  2713.  move.w #$f00,hitcol2
  2714.  sub.w d2,PLR2_energy
  2715.  movem.l d0-d7/a0-a6,-(a7)
  2716.  move.w #19,Samplenum
  2717.  clr.b notifplaying
  2718.  move.b #$fb,IDNUM
  2719.  move.w #0,Noisex
  2720.  move.w #0,Noisez
  2721.  move.w #100,Noisevol
  2722.  jsr MakeSomeNoise
  2723.  
  2724.  movem.l (a7)+,d0-d7/a0-a6
  2725.  
  2726. .notbeenshot
  2727.  move.b #0,damagetaken(a0)
  2728.  move.b PLR2_energy+1,numlives(a0)
  2729.  
  2730.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2731.  
  2732.  move.w (a1),12(a0)
  2733.  move.w (a1),d2
  2734.  move.l #ZoneBrightTable,a1
  2735.  move.l (a1,d2.w*4),d2
  2736.  tst.b PLR2_StoodInTop
  2737.  bne.s .okinbott
  2738.  swap d2
  2739. .okinbott:
  2740.  
  2741.  move.w d2,2(a0)
  2742.  
  2743.  move.l PLR2_yoff,d0
  2744.  move.l p2_height,d1
  2745.  asr.l #1,d1
  2746.  add.l d1,d0
  2747.  asr.l #7,d0
  2748.  move.w d0,4(a0)
  2749.  
  2750. ***********************************
  2751.  
  2752.  move.l PLR1_Obj,a0 
  2753.  
  2754.  move.w PLR1_angpos,d0
  2755.  and.w #8190,d0
  2756.  move.w d0,Facing(a0)
  2757.  
  2758.  jsr ViewpointToDraw
  2759.  asl.w #2,d0
  2760.  moveq #0,d1
  2761.  move.b p1_bobble,d1
  2762.  not.b d1
  2763.  lsr.b #3,d1
  2764.  and.b #$3,d1
  2765.  add.w d1,d0
  2766.  move.w d0,10(a0)
  2767.  move.w #10,8(a0)
  2768.  
  2769.  move.l ObjectPoints,a1
  2770.  move.l #ObjRotated,a2
  2771.  move.w (a0),d0
  2772.  move.l PLR1_xoff,(a1,d0.w*8)
  2773.  move.l PLR1_zoff,4(a1,d0.w*8)
  2774.  move.l PLR1_Roompt,a1
  2775.  
  2776.  moveq #0,d2
  2777.  move.b damagetaken(a0),d2
  2778.  beq.b .notbeenshot2
  2779.  sub.w d2,PLR1_energy
  2780. .notbeenshot2
  2781.  move.b #0,damagetaken(a0)
  2782.  move.b PLR1_energy+1,numlives(a0)
  2783.  
  2784.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2785.  
  2786.  move.w (a1),12(a0)
  2787.  move.w (a1),d2
  2788.  move.l #ZoneBrightTable,a1
  2789.  move.l (a1,d2.w*4),d2
  2790.  tst.b PLR1_StoodInTop
  2791.  bne.s .okinbott2
  2792.  swap d2
  2793. .okinbott2:
  2794.  
  2795.  move.w d2,2(a0)
  2796.  
  2797.  move.l PLR1_yoff,d0
  2798.  move.l p1_height,d1
  2799.  asr.l #1,d1
  2800.  add.l d1,d0
  2801.  asr.l #7,d0
  2802.  move.w d0,4(a0)
  2803.  
  2804. **********************************
  2805.  
  2806.  move.l PLR2_Obj,a0
  2807.  move.w #-1,12+64(a0)
  2808.  
  2809.  rts
  2810.  
  2811.  
  2812. GunSelected: dc.b 0
  2813.  even
  2814.  
  2815. GunAnims:
  2816.  dc.l MachineAnim,3
  2817.  dc.l PlasmaAnim,5
  2818.  dc.l RocketAnim,5
  2819.  dc.l FlameThrowerAnim,5
  2820.  dc.l GrenadeAnim,12
  2821.  dc.l 0,0
  2822.  dc.l 0,0
  2823.  dc.l ShotGunAnim,12+19+11+20+1
  2824.  
  2825. MachineAnim:
  2826.  dc.w 0,1,2,3
  2827. PlasmaAnim:
  2828.  dc.w 0,1,2,3,3,3
  2829. RocketAnim:
  2830.  dc.w 0,1,2,3,3,3
  2831. FlameThrowerAnim:
  2832.  dc.w 0,1,2,3,3,3
  2833. GrenadeAnim:
  2834.  dc.w 0,1,1,1,1
  2835.  dc.w 2,2,2,2,3
  2836.  dc.w 3,3,3
  2837. ShotGunAnim:
  2838.  dc.w 0
  2839.  dcb.w 12,2
  2840.  dcb.w 19,1
  2841.  dcb.w 11,2
  2842.  dcb.w 20,0
  2843.  dc.w 3
  2844.  
  2845. GunData: dc.l 0
  2846.  
  2847. PLR1_GunData:
  2848. ; 0=Pistol 1=Big Gun
  2849. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2850.  
  2851. ; VISIBLE/INSTANT (0/FF)
  2852. ; damage,gotgun(b)
  2853. ; Delay (w), Lifetime of bullet (w)
  2854. ; Click or hold down (0,1)
  2855. ; BulSpd: (w)
  2856.  
  2857. ;0
  2858.  dc.w 0
  2859. ;2
  2860.  dc.b 8,3
  2861. ;4
  2862.  dc.b 15
  2863. ;5
  2864.  dc.b -1
  2865. ;6
  2866.  dc.b 4,$ff
  2867. ;8
  2868.  dc.w 5,-1,1,0
  2869. ;16
  2870.  dc.w 0,0,0
  2871. ;22
  2872.  dc.w 1
  2873.  
  2874.  ds.w 4
  2875.  
  2876. ;PlasmaGun
  2877.  
  2878.  dc.w 0
  2879.  dc.b 8,1
  2880.  dc.b 20
  2881.  dc.b 0
  2882.  dc.b 16,0
  2883.  dc.w 10,-1,0,5
  2884.  dc.w 0,0,0
  2885.  dc.w 1
  2886.  
  2887.  ds.w 4
  2888.  
  2889. ;RocketLauncher
  2890.  
  2891.  dc.w 0
  2892.  dc.b 8,9
  2893.  dc.b 2
  2894.  dc.b 0
  2895.  dc.b 12,0
  2896.  dc.w 30,-1,0,5
  2897.  dc.w 0,0,0
  2898.  dc.w 1
  2899.  
  2900.  
  2901.  ds.w 4
  2902.  
  2903. ; FlameThrower
  2904.  
  2905.  dc.w 90*8
  2906.  dc.b 1,22
  2907.  dc.b 40
  2908.  dc.b 0
  2909.  dc.b 8,$0    
  2910.  dc.w 5,50,1,4
  2911.  dc.w 0,0,0
  2912.  dc.w 1
  2913.  
  2914.  ds.w 4
  2915.  
  2916. ;Grenade launcher
  2917.  
  2918.  
  2919.  dc.w 0
  2920.  dc.b 8,9
  2921.  dc.b 6
  2922.  dc.b 0
  2923.  dc.b 8,0
  2924.  dc.w 50,100,1,5
  2925.  dc.w 60,3
  2926.  dc.w -1000
  2927.  dc.w 1
  2928.  
  2929.  ds.w 4
  2930.  
  2931. ; WORMGUN
  2932.  
  2933.  dc.w 0
  2934.  dc.b 0,0
  2935.  dc.b 0
  2936.  dc.b 0,0
  2937.  dc.w 0,-1,0,5
  2938.  dc.w 0,0
  2939.  dc.w 0
  2940.  dc.w 1
  2941.  ds.w 4
  2942.  
  2943. ; ToughMarineGun
  2944.  
  2945.  dc.w 0
  2946.  dc.b 0,0
  2947.  dc.b 0
  2948.  dc.b 0,0
  2949.  dc.w 0,-1,0,5
  2950.  dc.w 0,0
  2951.  dc.w 0
  2952.  dc.w 1
  2953.  ds.w 4
  2954.  
  2955. ; Shotgun
  2956.  
  2957. ;0
  2958.  dc.w 0
  2959. ;2
  2960.  dc.b 8,21
  2961. ;4
  2962.  dc.b 15
  2963. ;5
  2964.  dc.b -1
  2965. ;6
  2966.  dc.b 4,0
  2967. ;8
  2968.  dc.w 50,-1,1,0
  2969. ;16
  2970.  dc.w 0,0,0
  2971. ;22
  2972.  dc.w 7
  2973.  
  2974.  ds.w 4
  2975.  
  2976. PLR2_GunData:
  2977. ; 0=Pistol 1=Big Gun
  2978. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2979.  
  2980. ; VISIBLE/INSTANT (0/FF)
  2981. ; damage,gotgun(b)
  2982. ; Delay (w)
  2983.  
  2984. ;0
  2985.  dc.w 0
  2986. ;2
  2987.  dc.b 8,3
  2988. ;4
  2989.  dc.b 15
  2990. ;5
  2991.  dc.b -1
  2992. ;6
  2993.  dc.b 4,$ff
  2994. ;8
  2995.  dc.w 5,-1,1,0
  2996. ;16
  2997.  dc.w 0,0,0
  2998. ;22
  2999.  dc.w 1
  3000.  
  3001.  ds.w 4
  3002.  
  3003. ;PlasmaGun
  3004.  
  3005.  dc.w 0
  3006.  dc.b 8,1
  3007.  dc.b 20
  3008.  dc.b 0
  3009.  dc.b 16,0
  3010.  dc.w 10,-1,0,5
  3011.  dc.w 0,0,0
  3012.  dc.w 1
  3013.  
  3014.  ds.w 4
  3015.  
  3016. ;RocketLauncher
  3017.  
  3018.  dc.w 0
  3019.  dc.b 8,9
  3020.  dc.b 2
  3021.  dc.b 0
  3022.  dc.b 12,0
  3023.  dc.w 30,-1,0,5
  3024.  dc.w 0,0,0
  3025.  dc.w 1
  3026.  
  3027.  
  3028.  ds.w 4
  3029.  
  3030. ; FlameThrower
  3031.  
  3032.  dc.w 90*8
  3033.  dc.b 1,22
  3034.  dc.b 40
  3035.  dc.b 0
  3036.  dc.b 8,$0    
  3037.  dc.w 5,50,1,4
  3038.  dc.w 0,0,0
  3039.  dc.w 1
  3040.  
  3041.  ds.w 4
  3042.  
  3043. ;Grenade launcher
  3044.  
  3045.  
  3046.  dc.w 0
  3047.  dc.b 8,9
  3048.  dc.b 6
  3049.  dc.b 0
  3050.  dc.b 8,0
  3051.  dc.w 50,100,1,5
  3052.  dc.w 60,3
  3053.  dc.w -1000
  3054.  dc.w 1
  3055.  
  3056.  ds.w 4
  3057.  
  3058. ; WORMGUN
  3059.  
  3060.  dc.w 0
  3061.  dc.b 0,0
  3062.  dc.b 0
  3063.  dc.b 0,0
  3064.  dc.w 0,-1,0,5
  3065.  dc.w 0,0
  3066.  dc.w 0
  3067.  dc.w 1
  3068.  ds.w 4
  3069.  
  3070. ; ToughMarineGun
  3071.  
  3072.  dc.w 0
  3073.  dc.b 0,0
  3074.  dc.b 0
  3075.  dc.b 0,0
  3076.  dc.w 0,-1,0,5
  3077.  dc.w 0,0
  3078.  dc.w 0
  3079.  dc.w 1
  3080.  ds.w 4
  3081.  
  3082. ; Shotgun
  3083.  
  3084. ;0
  3085.  dc.w 0
  3086. ;2
  3087.  dc.b 8,21
  3088. ;4
  3089.  dc.b 15
  3090. ;5
  3091.  dc.b -1
  3092. ;6
  3093.  dc.b 4,0
  3094. ;8
  3095.  dc.w 50,-1,1,0
  3096. ;16
  3097.  dc.w 0,0,0
  3098. ;22
  3099.  dc.w 7
  3100.  
  3101.  ds.w 4
  3102.  
  3103.  
  3104.  
  3105. protA: dc.w 0
  3106.  
  3107. Path:
  3108. ; incbin "testpath"
  3109. endpath:
  3110. pathpt: dc.l Path
  3111.  
  3112.  
  3113. PLR1KEYS: dc.b 0
  3114. PLR1PATH: dc.b 0
  3115. PLR1MOUSE: dc.b -1
  3116. PLR1JOY: dc.b 0
  3117. PLR2KEYS: dc.b 0
  3118. PLR2PATH: dc.b 0
  3119. PLR2MOUSE: dc.b -1
  3120. PLR2JOY: dc.b 0
  3121.  
  3122.  even
  3123.  
  3124. PLR1_bobble: dc.w 0
  3125. PLR2_bobble: dc.w 0
  3126. xwobble: dc.l 0
  3127. xwobxoff: dc.w 0
  3128.  
  3129. xwobzoff: dc.w 0
  3130.  
  3131. PLR1_Control:
  3132.  
  3133. ; Take a snapshot of everything.
  3134.  
  3135.  move.l PLR1_xoff,d2
  3136.  move.l d2,PLR1_oldxoff
  3137.  move.l d2,oldx
  3138.  move.l PLR1_zoff,d3
  3139.  move.l d3,PLR1_oldzoff
  3140.  move.l d3,oldz
  3141.  move.l p1_xoff,d0
  3142.  move.l d0,PLR1_xoff
  3143.  move.l d0,newx
  3144.  move.l p1_zoff,d1
  3145.  move.l d1,newz
  3146.  move.l d1,PLR1_zoff
  3147.  
  3148.  move.l p1_height,PLR1_height
  3149.  
  3150.  sub.l d2,d0
  3151.  sub.l d3,d1
  3152.  move.l d0,xdiff
  3153.  move.l d1,zdiff
  3154.  move.w p1_angpos,d0
  3155.  move.w d0,PLR1_angpos
  3156.  
  3157.  move.l #SineTable,a1
  3158.  move.w (a1,d0.w),PLR1_sinval
  3159.  add.w #2048,d0
  3160.  and.w #8190,d0
  3161.  move.w (a1,d0.w),PLR1_cosval
  3162.  
  3163.  move.l p1_yoff,d0
  3164.  move.w p1_bobble,d1
  3165.  move.w (a1,d1.w),d1
  3166.  move.w d1,d3
  3167.  ble.s notnegative
  3168.  neg.w d1
  3169. notnegative:
  3170.  add.w #16384,d1
  3171.  asr.w #4,d1
  3172.  
  3173.  tst.b PLR1_Ducked
  3174.  bne.s .notdouble
  3175.  add.w d1,d1
  3176. .notdouble
  3177.  ext.l d1
  3178.  move.l PLR1_height,d4
  3179.  sub.l d1,d4
  3180.  add.l d1,d0
  3181.  
  3182.  cmp.b #'s',mors
  3183.  beq.s .otherwob
  3184.  asr.w #6,d3
  3185.  ext.l d3
  3186.  move.l d3,xwobble
  3187.  move.w PLR1_sinval,d1
  3188.  muls d3,d1
  3189.  move.w PLR1_cosval,d2
  3190.  muls d3,d2
  3191.  swap d1
  3192.  swap d2
  3193.  asr.w #7,d1
  3194.  move.w d1,xwobxoff
  3195.  asr.w #7,d2
  3196.  neg.w d2
  3197.  move.w d2,xwobzoff
  3198. .otherwob
  3199.  
  3200.  move.l d0,PLR1_yoff
  3201.  move.l d0,newy
  3202.  move.l d0,oldy
  3203.  
  3204.  move.l d4,thingheight
  3205.  move.l #40*256,StepUpVal
  3206.  tst.b PLR1_Ducked
  3207.  beq.s .okbigstep
  3208.  move.l #10*256,StepUpVal
  3209. .okbigstep:
  3210.  
  3211.  move.l #$1000000,StepDownVal
  3212.  
  3213.  move.l PLR1_Roompt,a0
  3214.  move.w ToTelZone(a0),d0
  3215.  blt .noteleport
  3216.  
  3217.  move.w ToTelX(a0),newx
  3218.  move.w ToTelZ(a0),newz
  3219.  move.w #-1,CollId
  3220.  move.l #%111111111111111111,CollideFlags
  3221.  bsr Collision
  3222.  tst.b hitwall
  3223.  beq.s .teleport
  3224.  
  3225.  move.w PLR1_xoff,newx
  3226.  move.w PLR1_zoff,newz
  3227.  bra .noteleport
  3228.  
  3229. .teleport:
  3230.  
  3231.  move.l PLR1_Roompt,a0
  3232.  move.w ToTelZone(a0),d0
  3233.  move.w ToTelX(a0),PLR1_xoff
  3234.  move.w ToTelZ(a0),PLR1_zoff
  3235.  move.l PLR1_yoff,d1
  3236.  sub.l ToZoneFloor(a0),d1
  3237.  move.l ZoneAdds,a0
  3238.  move.l (a0,d0.w*4),a0
  3239.  add.l LEVELDATA,a0
  3240.  move.l a0,PLR1_Roompt
  3241.  add.l ToZoneFloor(a0),d1
  3242.  move.l d1,PLR1s_yoff
  3243.  move.l d1,PLR1_yoff
  3244.  move.l d1,PLR1s_tyoff
  3245.  move.l PLR1_xoff,PLR1s_xoff
  3246.  move.l PLR1_zoff,PLR1s_zoff
  3247.  
  3248.  SAVEREGS
  3249.  move.w #0,Noisex
  3250.  move.w #0,Noisez
  3251.  move.w #26,Samplenum
  3252.  move.w #100,Noisevol
  3253.  move.b #$fa,IDNUM
  3254.  jsr MakeSomeNoise
  3255.  GETREGS
  3256.  
  3257.  bra .cantmove
  3258.  
  3259. .noteleport:
  3260.  
  3261.  move.l PLR1_Roompt,objroom
  3262.  move.w #%100000000,wallflags
  3263.  move.b PLR1_StoodInTop,StoodInTop
  3264.  
  3265.  move.l #%1011111110111000001,CollideFlags
  3266.  move.w #-1,CollId
  3267.  
  3268.  bsr Collision
  3269.  tst.b hitwall
  3270.  beq.s .nothitanything
  3271.  move.w oldx,PLR1_xoff
  3272.  move.w oldz,PLR1_zoff
  3273.  move.l PLR1_xoff,PLR1s_xoff
  3274.  move.l PLR1_zoff,PLR1s_zoff
  3275.  bra.b .cantmove
  3276. .nothitanything:
  3277.  
  3278.  move.w #40,extlen
  3279.  move.b #0,awayfromwall
  3280.  
  3281.  clr.b exitfirst
  3282.  clr.b wallbounce
  3283.  bsr MoveObject
  3284.  move.b StoodInTop,PLR1_StoodInTop
  3285.  move.l objroom,PLR1_Roompt
  3286.  move.w newx,PLR1_xoff
  3287.  move.w newz,PLR1_zoff
  3288.  move.l PLR1_xoff,PLR1s_xoff
  3289.  move.l PLR1_zoff,PLR1s_zoff
  3290.  
  3291. .cantmove:
  3292.  
  3293.  move.l PLR1_Roompt,a0
  3294.  
  3295.  move.l ToZoneFloor(a0),d0
  3296.  tst.b PLR1_StoodInTop
  3297.  beq.s notintop
  3298.  move.l ToUpperFloor(a0),d0
  3299. notintop:
  3300.  
  3301.  adda.w #ToZonePts,a0
  3302.  sub.l PLR1_height,d0
  3303.  move.l d0,PLR1s_tyoff
  3304.  move.w p1_angpos,tmpangpos
  3305.  
  3306. ; move.l (a0),a0        ; jump to viewpoint list
  3307.  * A0 is pointing at a pointer to list of points to rotate
  3308.  move.w (a0)+,d1
  3309.  ext.l d1
  3310.  add.l PLR1_Roompt,d1
  3311.  move.l d1,PLR1_PointsToRotatePtr
  3312.  tst.w (a0)+
  3313.  sne.s DRAWNGRAPHTOP
  3314.  beq.s nobackgraphics
  3315.  cmp.b #'s',mors
  3316.  beq.s nobackgraphics
  3317.  move.l a0,-(a7)
  3318.  jsr putinbackdrop 
  3319.  move.l (a7)+,a0
  3320. nobackgraphics:
  3321.  adda.w #10,a0
  3322.  move.l a0,PLR1_ListOfGraphRooms
  3323.  
  3324. *************************************************
  3325.  rts
  3326.  
  3327. DRAWNGRAPHTOP
  3328.  
  3329. tstzone: dc.l 0
  3330. CollId: dc.w 0
  3331.  
  3332. PLR2_Control:
  3333.  
  3334.  PROTLCHECK a0
  3335.  
  3336. ; Take a snapshot of everything.
  3337.  
  3338.  move.l PLR2_xoff,d2
  3339.  move.l d2,PLR2_oldxoff
  3340.  move.l d2,oldx
  3341.  move.l PLR2_zoff,d3
  3342.  move.l d3,PLR2_oldzoff
  3343.  move.l d3,oldz
  3344.  move.l p2_xoff,d0
  3345.  move.l d0,PLR2_xoff
  3346.  move.l d0,newx
  3347.  move.l p2_zoff,d1
  3348.  move.l d1,newz
  3349.  move.l d1,PLR2_zoff
  3350.  
  3351.  move.l p2_height,PLR2_height
  3352.  
  3353.  sub.l d2,d0
  3354.  sub.l d3,d1
  3355.  move.l d0,xdiff
  3356.  move.l d1,zdiff
  3357.  move.w p2_angpos,d0
  3358.  move.w d0,PLR2_angpos
  3359.  
  3360.  move.l #SineTable,a1
  3361.  move.w (a1,d0.w),PLR2_sinval
  3362.  add.w #2048,d0
  3363.  and.w #8190,d0
  3364.  move.w (a1,d0.w),PLR2_cosval
  3365.  
  3366.  move.l p2_yoff,d0
  3367.  move.w p2_bobble,d1
  3368.  move.w (a1,d1.w),d1
  3369.  move.w d1,d3
  3370.  ble.s .notnegative
  3371.  neg.w d1
  3372. .notnegative:
  3373.  add.w #16384,d1
  3374.  asr.w #4,d1
  3375.  add.w d1,d1
  3376.  ext.l d1
  3377.  move.l PLR2_height,d4
  3378.  sub.l d1,d4
  3379.  add.l d1,d0
  3380.  
  3381.  cmp.b #'s',mors
  3382.  bne.s .otherwob
  3383.  asr.w #6,d3
  3384.  ext.l d3
  3385.  move.l d3,xwobble
  3386.  move.w PLR2_sinval,d1
  3387.  muls d3,d1
  3388.  move.w PLR2_cosval,d2
  3389.  muls d3,d2
  3390.  swap d1
  3391.  swap d2
  3392.  asr.w #7,d1
  3393.  move.w d1,xwobxoff
  3394.  asr.w #7,d2
  3395.  neg.w d2
  3396.  move.w d2,xwobzoff
  3397. .otherwob
  3398.  
  3399.  move.l d0,PLR2_yoff
  3400.  move.l d0,newy
  3401.  move.l d0,oldy
  3402.  
  3403.  move.l d4,thingheight
  3404.  move.l #40*256,StepUpVal
  3405.  tst.b PLR2_Ducked
  3406.  beq.s .okbigstep
  3407.  move.l #10*256,StepUpVal
  3408. .okbigstep:
  3409.  
  3410.  move.l #$1000000,StepDownVal
  3411.  
  3412.  move.l PLR2_Roompt,a0
  3413.  move.w ToTelZone(a0),d0
  3414.  blt .noteleport
  3415.  
  3416.  move.w ToTelX(a0),newx
  3417.  move.w ToTelZ(a0),newz
  3418.  move.w #-1,CollId
  3419.  move.l #%111111111111111111,CollideFlags
  3420.  bsr Collision
  3421.  tst.b hitwall
  3422.  beq.s .teleport
  3423.  
  3424.  move.w PLR2_xoff,newx
  3425.  move.w PLR2_zoff,newz
  3426.  bra .noteleport
  3427.  
  3428. .teleport:
  3429.  
  3430.  move.l PLR2_Roompt,a0
  3431.  move.w ToTelZone(a0),d0
  3432.  move.w ToTelX(a0),PLR2_xoff
  3433.  move.w ToTelZ(a0),PLR2_zoff
  3434.  move.l PLR2_yoff,d1
  3435.  sub.l ToZoneFloor(a0),d1
  3436.  move.l ZoneAdds,a0
  3437.  move.l (a0,d0.w*4),a0
  3438.  add.l LEVELDATA,a0
  3439.  move.l a0,PLR2_Roompt
  3440.  add.l ToZoneFloor(a0),d1
  3441.  move.l d1,PLR2s_yoff
  3442.  move.l d1,PLR2_yoff
  3443.  move.l d1,PLR2s_tyoff
  3444.  move.l PLR2_xoff,PLR2s_xoff
  3445.  move.l PLR2_zoff,PLR2s_zoff
  3446.  
  3447.  SAVEREGS
  3448.  move.w #0,Noisex
  3449.  move.w #0,Noisez
  3450.  move.w #26,Samplenum
  3451.  move.w #100,Noisevol
  3452.  move.b #$fa,IDNUM
  3453.  jsr MakeSomeNoise
  3454.  GETREGS
  3455.  
  3456.  bra .cantmove
  3457.  
  3458. .noteleport:
  3459.  
  3460.  move.l PLR2_Roompt,objroom
  3461.  move.w #%100000000000,wallflags
  3462.  move.b PLR2_StoodInTop,StoodInTop
  3463.  
  3464.  move.l #%1011111010111100001,CollideFlags
  3465.  move.w #-1,CollId
  3466.  
  3467.  bsr Collision
  3468.  tst.b hitwall
  3469.  beq.s .nothitanything
  3470.  move.w oldx,PLR2_xoff
  3471.  move.w oldz,PLR2_zoff
  3472.  move.l PLR2_xoff,PLR2s_xoff
  3473.  move.l PLR2_zoff,PLR2s_zoff
  3474.  bra.b .cantmove
  3475. .nothitanything:
  3476.  
  3477.  move.w #40,extlen
  3478.  move.b #0,awayfromwall
  3479.  
  3480.  clr.b exitfirst
  3481.  clr.b wallbounce
  3482.  bsr MoveObject
  3483.  move.b StoodInTop,PLR2_StoodInTop
  3484.  move.l objroom,PLR2_Roompt
  3485.  move.w newx,PLR2_xoff
  3486.  move.w newz,PLR2_zoff
  3487.  move.l PLR2_xoff,PLR2s_xoff
  3488.  move.l PLR2_zoff,PLR2s_zoff
  3489.  
  3490. .cantmove
  3491.  
  3492.  move.l PLR2_Roompt,a0
  3493.  
  3494.  move.l ToZoneFloor(a0),d0
  3495.  tst.b PLR2_StoodInTop
  3496.  beq.s .notintop
  3497.  move.l ToUpperFloor(a0),d0
  3498. .notintop:
  3499.  
  3500.  adda.w #ToZonePts,a0
  3501.  sub.l PLR2_height,d0
  3502.  move.l d0,PLR2s_tyoff
  3503.  move.w p2_angpos,tmpangpos
  3504.  
  3505. ; move.l (a0),a0        ; jump to viewpoint list
  3506.  * A0 is pointing at a pointer to list of points to rotate
  3507.  move.w (a0)+,d1
  3508.  ext.l d1
  3509.  add.l PLR2_Roompt,d1
  3510.  move.l d1,PLR2_PointsToRotatePtr
  3511.  tst.w (a0)+
  3512.  beq.s .nobackgraphics
  3513.  cmp.b #'s',mors
  3514.  bne.s .nobackgraphics
  3515.  move.l a0,-(a7)
  3516.  jsr putinbackdrop 
  3517.  move.l (a7)+,a0
  3518. .nobackgraphics:
  3519.  adda.w #10,a0
  3520.  move.l a0,PLR2_ListOfGraphRooms
  3521.  
  3522. *****************************************************
  3523.  
  3524.  rts
  3525.  
  3526.  
  3527. KeyMap: ds.b 256
  3528.  
  3529. fillscrnwater:
  3530.  dc.w 0
  3531. DONTDOGUN:
  3532.  dc.w 0
  3533.  
  3534.  
  3535. DrawDisplay:
  3536.  
  3537.  
  3538.  clr.b fillscrnwater
  3539.  
  3540.  move.l #SineTable,a0
  3541.  move.w angpos,d0
  3542.  move.w (a0,d0.w),d6
  3543.  adda.w #2048,a0
  3544.  move.w (a0,d0.w),d7
  3545.  move.w d6,sinval
  3546.  move.w d7,cosval
  3547.  
  3548.  move.l #KeyMap,a5
  3549.  moveq #0,d5
  3550.  move.b look_behind_key,d5
  3551.  tst.b (a5,d5.w)
  3552.  sne DONTDOGUN
  3553.  beq.s .nolookback
  3554.  neg.w cosval
  3555.  neg.w sinval
  3556. .nolookback:
  3557.  
  3558.  
  3559.  move.l yoff,d0
  3560.  asr.l #8,d0
  3561.  move.w d0,d1
  3562.  add.w #256-32,d1
  3563.  and.w #255,d1
  3564.  move.w d1,wallyoff
  3565.  asl.w #2,d0
  3566.  move.w d0,flooryoff
  3567.  
  3568.  move.w xoff,d6
  3569.  move.w d6,d3
  3570.  asr.w #1,d3
  3571.  add.w d3,d6
  3572.  asr.w #1,d6
  3573.  move.w d6,xoff34
  3574.  
  3575.  move.w zoff,d6
  3576.  move.w d6,d3
  3577.  asr.w #1,d3
  3578.  add.w d3,d6
  3579.  asr.w #1,d6
  3580.  move.w d6,zoff34
  3581.  
  3582.  bsr RotateLevelPts
  3583.  bsr RotateObjectPts
  3584.  bsr CalcPLR1InLine
  3585.  
  3586.  
  3587.  cmp.b #'n',mors
  3588.  bne.s doplr2too
  3589.  move.l PLR2_Obj,a0
  3590.  move.w #-1,12(a0)
  3591.  move.w #-1,GraphicRoom(a0)
  3592.  bra.b noplr2either
  3593.  
  3594. doplr2too:
  3595.  bsr CalcPLR2InLine
  3596. noplr2either:
  3597.  
  3598.  move.l endoflist,a0
  3599. subroomloop:
  3600.  move.w -(a0),d7
  3601.  blt jumpoutofrooms
  3602.  
  3603. ; bsr setlrclip
  3604. ; move.w leftclip,d0
  3605. ; cmp.w rightclip,d0
  3606. ; bge subroomloop
  3607.  move.l a0,-(a7)
  3608.  
  3609.  move.l ZoneAdds,a0
  3610.  move.l (a0,d7.w*4),a0
  3611.  add.l LEVELDATA,a0
  3612.  move.l ToZoneRoof(a0),SplitHeight
  3613.  move.l a0,ROOMBACK
  3614.  
  3615.  move.l ZoneGraphAdds,a0
  3616.  move.l 4(a0,d7.w*8),a2
  3617.  move.l (a0,d7.w*8),a0
  3618.  
  3619.  add.l LEVELGRAPHICS,a0
  3620.  add.l LEVELGRAPHICS,a2
  3621.  move.l a2,ThisRoomToDraw+4
  3622.  move.l a0,ThisRoomToDraw
  3623.  
  3624.  move.l ListOfGraphRooms,a1
  3625.  
  3626.  
  3627.  
  3628. finditit:
  3629.  tst.w (a1)
  3630.  blt nomoretodoatall
  3631.  cmp.w (a1),d7
  3632.  beq.b outoffind
  3633.  adda.w #8,a1
  3634.  bra.b finditit
  3635.  
  3636. outoffind:
  3637.  
  3638.  move.l a1,-(a7)
  3639.  
  3640.  
  3641.  move.w #0,leftclip
  3642.  move.w #96,rightclip
  3643.  moveq #0,d7
  3644.  move.w 2(a1),d7
  3645.  blt.s outofrcliplop
  3646.  move.l LEVELCLIPS,a0
  3647.  lea (a0,d7.l*2),a0
  3648.  
  3649.  tst.w (a0)
  3650.  blt.b outoflcliplop
  3651.  
  3652.  bsr NEWsetlclip
  3653.  
  3654. intolcliplop:        ; clips
  3655.  tst.w (a0)
  3656.  blt.b outoflcliplop
  3657.  
  3658.  bsr NEWsetlclip 
  3659.  bra.b intolcliplop
  3660.  
  3661. outoflcliplop:
  3662.  
  3663.  addq #2,a0
  3664.  
  3665.  tst.w (a0)
  3666.  blt.b outofrcliplop
  3667.  
  3668.  bsr NEWsetrclip
  3669.  
  3670. intorcliplop:        ; clips
  3671.  tst.w (a0)
  3672.  blt.b outofrcliplop
  3673.  
  3674.  bsr NEWsetrclip 
  3675.  bra.b intorcliplop
  3676.  
  3677. outofrcliplop:
  3678.  
  3679.  
  3680.  move.w leftclip,d0
  3681.  cmp.w #96,d0
  3682.  bge dontbothercantseeit
  3683.  move.w rightclip,d1
  3684.  blt dontbothercantseeit
  3685.  cmp.w d1,d0
  3686.  bge dontbothercantseeit
  3687.  
  3688.  move.l yoff,d0
  3689.  cmp.l SplitHeight,d0
  3690.  blt botfirst
  3691.  
  3692.  move.l ThisRoomToDraw+4,a0
  3693.  cmp.l LEVELGRAPHICS,a0
  3694.  beq.s noupperroom
  3695.  st DOUPPER
  3696.  
  3697.  move.l ROOMBACK,a1
  3698.  move.l ToUpperRoof(a1),TOPOFROOM
  3699.  move.l ToUpperFloor(a1),BOTOFROOM
  3700.  
  3701.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3702.  bsr dothisroom
  3703. noupperroom:
  3704.  move.l ThisRoomToDraw,a0
  3705.  clr.b DOUPPER
  3706.  move.l #CurrentPointBrights,PointBrightsPtr
  3707.  
  3708.  move.l ROOMBACK,a1
  3709.  move.l ToZoneRoof(a1),d0
  3710.  move.l d0,TOPOFROOM
  3711.  move.l ToZoneFloor(a1),d1
  3712.  move.l d1,BOTOFROOM
  3713.  
  3714.  move.l ToZoneWater(a1),d2
  3715.  cmp.l yoff,d2
  3716.  blt.s .abovefirst
  3717.  move.l d2,BEFOREWATTOP
  3718.  move.l d1,BEFOREWATBOT
  3719.  move.l d2,AFTERWATBOT
  3720.  move.l d0,AFTERWATTOP
  3721.  bra.s .belowfirst
  3722. .abovefirst:
  3723.  move.l d0,BEFOREWATTOP
  3724.  move.l d2,BEFOREWATBOT
  3725.  move.l d1,AFTERWATBOT
  3726.  move.l d2,AFTERWATTOP
  3727. .belowfirst:
  3728.  
  3729.  bsr dothisroom
  3730.  
  3731.  bra dontbothercantseeit
  3732. botfirst:
  3733.  
  3734.  move.l ThisRoomToDraw,a0
  3735.  clr.b DOUPPER
  3736.  move.l #CurrentPointBrights,PointBrightsPtr
  3737.  
  3738.  move.l ROOMBACK,a1
  3739.  move.l ToZoneRoof(a1),d0
  3740.  move.l d0,TOPOFROOM
  3741.  move.l ToZoneFloor(a1),d1
  3742.  move.l d1,BOTOFROOM
  3743.  
  3744.  move.l ToZoneWater(a1),d2
  3745.  cmp.l yoff,d2
  3746.  blt.s .abovefirst
  3747.  move.l d2,BEFOREWATTOP
  3748.  move.l d1,BEFOREWATBOT
  3749.  move.l d2,AFTERWATBOT
  3750.  move.l d0,AFTERWATTOP
  3751.  bra.s .belowfirst
  3752. .abovefirst:
  3753.  move.l d0,BEFOREWATTOP
  3754.  move.l d2,BEFOREWATBOT
  3755.  move.l d1,AFTERWATBOT
  3756.  move.l d2,AFTERWATTOP
  3757. .belowfirst:
  3758.  
  3759.  
  3760.  bsr dothisroom
  3761.  move.l ThisRoomToDraw+4,a0
  3762.  cmp.l LEVELGRAPHICS,a0
  3763.  beq.s noupperroom2
  3764.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3765.  
  3766.  move.l ROOMBACK,a1
  3767.  move.l ToUpperRoof(a1),TOPOFROOM
  3768.  move.l ToUpperFloor(a1),BOTOFROOM
  3769.  
  3770.  st DOUPPER
  3771.  bsr dothisroom
  3772. noupperroom2:
  3773.  
  3774. dontbothercantseeit:
  3775. pastemp:
  3776.  
  3777.  move.l (a7)+,a1
  3778.  move.l ThisRoomToDraw,a0
  3779.  move.w (a0),d7
  3780.  
  3781.  adda.w #8,a1
  3782.  bra finditit
  3783.  
  3784. nomoretodoatall:
  3785.  
  3786.  move.l (a7)+,a0
  3787.  
  3788.  bra subroomloop
  3789.  
  3790. jumpoutofrooms:
  3791.  
  3792.  tst.b DONTDOGUN
  3793.  bne.b NOGUNLOOK
  3794.  
  3795.  cmp.b #'s',mors
  3796.  beq.s drawslavegun
  3797.  
  3798.  moveq #0,d0
  3799.  move.b PLR1_GunSelected,d0
  3800.  moveq #0,d1
  3801.  move.b PLR1_GunFrame,d1
  3802.  bsr DRAWINGUN
  3803.  bra.b drawngun
  3804.  
  3805. drawslavegun
  3806.  moveq #0,d0
  3807.  move.b PLR2_GunSelected,d0
  3808.  moveq #0,d1
  3809.  move.b PLR2_GunFrame,d1
  3810.  bsr DRAWINGUN
  3811.  
  3812. drawngun:
  3813.  
  3814. NOGUNLOOK:
  3815.  
  3816.  moveq #0,d1
  3817.  move.b PLR1_GunFrame,d1
  3818.  sub.w TempFrames,d1
  3819.  bgt.s .nn
  3820.  moveq #0,d1
  3821. .nn
  3822.  move.b d1,PLR1_GunFrame
  3823.  
  3824.  ble.s .donefire
  3825.  subq.b #1,PLR1_GunFrame
  3826. .donefire:
  3827.  
  3828.  moveq #0,d1
  3829.  move.b PLR2_GunFrame,d1
  3830.  sub.w TempFrames,d1
  3831.  bgt.s .nn2
  3832.  moveq #0,d1
  3833. .nn2
  3834.  move.b d2,PLR2_GunFrame
  3835.  
  3836.  ble.s .donefire2
  3837.  subq.b #1,PLR2_GunFrame
  3838. .donefire2:
  3839.  
  3840.  
  3841.  move.w #3,d5
  3842.  tst.b fillscrnwater
  3843.  beq nowaterfull
  3844.  bgt.b oknothalf
  3845.  moveq #1,d5
  3846. oknothalf:
  3847.  
  3848.  bclr.b #1,$bfe001
  3849.  
  3850.  move.l #brightentab,a2
  3851.  moveq #0,d2
  3852.  move.l frompt,a0
  3853.  lea 104*4*60(a0),a0
  3854.  
  3855.  move.w #31,d0
  3856. fw:
  3857.  move.w d5,d1
  3858.  move.l a0,a1
  3859. fwd:
  3860. val SET 104*4*19
  3861.  REPT 20
  3862.  and.w #$ff,val(a1)
  3863. val SET val-104*4
  3864.  ENDR
  3865.  lea 104*4*20(a1),a1
  3866.  dbra d1,fwd
  3867.  addq #4,a0
  3868.  dbra d0,fw
  3869.  
  3870.  addq #4,a0
  3871.  
  3872.  move.w #31,d0
  3873. sw:
  3874.  move.w d5,d1
  3875.  move.l a0,a1
  3876. swd:
  3877. val SET 104*4*19
  3878.  REPT 20
  3879.  and.w #$ff,val(a1)
  3880. val SET val-104*4
  3881.  ENDR
  3882.  lea 104*4*20(a1),a1
  3883.  dbra d1,swd
  3884.  addq #4,a0
  3885.  dbra d0,sw
  3886.  
  3887.  addq #4,a0
  3888.  
  3889.  move.w #31,d0
  3890. tw:
  3891.  move.w d5,d1
  3892.  move.l a0,a1
  3893. twd:
  3894. val SET 104*4*19
  3895.  REPT 20
  3896.  and.w #$ff,val(a1)
  3897. val SET val-104*4
  3898.  ENDR
  3899.  lea 104*4*20(a1),a1
  3900.  dbra d1,twd
  3901.  addq #4,a0
  3902.  dbra d0,tw
  3903.  
  3904.  rts
  3905.  
  3906. nowaterfull:
  3907.  bset.b #1,$bfe001
  3908.  rts
  3909.  
  3910. prot9: dc.w 0
  3911.  
  3912. TempBuffer: ds.l 100 
  3913.  
  3914. ClipTable: ds.l 30
  3915. EndOfClipPt: dc.l 0
  3916. DOUPPER: dc.w 0
  3917.  
  3918. RealTable:
  3919.  dc.l prot1-78935450
  3920.  dc.l prot2-78935450
  3921.  dc.l prot3-78935450
  3922.  dc.l prot4-78935450
  3923.  dc.l prot5-78935450
  3924.  dc.l prot6-78935450
  3925.  dc.l prot7-78935450
  3926.  dc.l prot8-78935450
  3927.  dc.l prot9-78935450
  3928.  dc.l protA-78935450
  3929.  
  3930. dothisroom
  3931.  
  3932.  move.w (a0)+,d0
  3933.  move.w d0,currzone
  3934.  move.l #ZoneBrightTable,a1
  3935.  move.l (a1,d0.w*4),d1
  3936.  tst.b DOUPPER
  3937.  bne.s .okbot
  3938.  swap d1
  3939. .okbot:
  3940.  move.w d1,ZoneBright
  3941.  
  3942. polyloop:
  3943.  move.w (a0)+,d0
  3944.  blt jumpoutofloop
  3945.  beq itsawall
  3946.  cmp.w #3,d0
  3947.  beq itsasetclip
  3948.  blt itsafloor
  3949.  cmp.w #4,d0
  3950.  beq.b itsanobject
  3951.  cmp.w #5,d0
  3952.  beq.b itsanarc
  3953.  cmp.w #6,d0
  3954.  beq.b itsalightbeam
  3955.  cmp.w #7,d0
  3956.  beq.s itswater
  3957.  cmp.w #9,d0
  3958.  ble itsachunkyfloor
  3959.  cmp.w #11,d0
  3960.  ble.b itsabumpyfloor
  3961.  cmp.w #12,d0
  3962.  beq.s itsbackdrop
  3963.  cmp.w #13,d0
  3964.  beq.s itsaseewall
  3965.  
  3966.  bra.b polyloop
  3967.  
  3968. itsaseewall:
  3969.  st seethru
  3970.  jsr itsawalldraw
  3971.  bra.b polyloop
  3972.  
  3973. itsbackdrop:
  3974.  jsr putinbackdrop
  3975.  bra.b polyloop
  3976.  
  3977. itswater:
  3978.  PROTHCHECK
  3979.  move.w #3,d0
  3980.  clr.b gourfloor
  3981.  move.l #FloorLine,LineToUse
  3982.  st usewater
  3983.  clr.b usebumps
  3984.  jsr itsafloordraw
  3985.  bra polyloop
  3986.  
  3987. itsanarc:
  3988.  jsr CurveDraw
  3989.  bra polyloop
  3990.  
  3991. itsanobject:
  3992.  jsr ObjDraw
  3993.  bra polyloop
  3994.  
  3995. itsalightbeam:
  3996.  jsr LightDraw
  3997.  bra polyloop
  3998.  
  3999. itsabumpyfloor:
  4000.  sub.w #9,d0
  4001.  st usebumps
  4002.  st smoothbumps
  4003.  clr.b usewater
  4004.  move.l #BumpLine,LineToUse
  4005.  jsr itsafloordraw
  4006.  bra polyloop
  4007.  
  4008. itsachunkyfloor:
  4009.  subq.w #7,d0
  4010.  st usebumps
  4011.  sub.w #12,topclip
  4012. ; add.w #10,botclip
  4013.  clr.b smoothbumps
  4014.  clr.b usewater
  4015.  move.l #BumpLine,LineToUse
  4016.  jsr itsafloordraw
  4017.  add.w #12,topclip
  4018. ; sub.w #10,botclip
  4019.  bra polyloop 
  4020.  
  4021. itsafloor:
  4022.  
  4023.  movem.l a0/d0,-(a7)
  4024.  move.l $4.w,a6
  4025.  jsr _LVOSuperState(a6)
  4026.  move.l d0,SSTACK
  4027.  movem.l (a7)+,a0/d0
  4028.  
  4029.  move.l THEFLOORLINE,LineToUse
  4030. * 1,2 = floor/roof
  4031.  clr.b usewater
  4032.  clr.b usebumps
  4033.  move.b GOURSEL,gourfloor    
  4034.  jsr itsafloordraw
  4035.  move.l a0,-(a7)
  4036.  move.l $4.w,a6
  4037.  move.l SSTACK,d0
  4038.  jsr _LVOUserState(a6)
  4039.  move.l (a7)+,a0
  4040.  bra polyloop
  4041. itsasetclip:
  4042.  bra polyloop
  4043. itsawall:
  4044.  clr.b seethru
  4045. ; move.l #stripbuffer,a1
  4046.  jsr itsawalldraw
  4047.  bra polyloop
  4048.  
  4049. jumpoutofloop:
  4050.  rts
  4051.  
  4052. GOURSEL: dc.w 0
  4053. ThisRoomToDraw: dc.l 0,0
  4054. SplitHeight: dc.l 0
  4055.  
  4056.  include "ab3:source/OrderZones"
  4057.  
  4058. ReadMouse:
  4059.  move.l #$dff000,a6
  4060.  clr.l d0
  4061.  clr.l d1
  4062.  move.w $a(a6),d0
  4063.  lsr.w #8,d0
  4064.  ext.l d0
  4065.  move.w d0,d3
  4066.  move.w oldmy,d2
  4067.  sub.w d2,d0
  4068.  
  4069.  cmp.w #127,d0
  4070.  blt.b nonegy
  4071.  move.w #255,d1
  4072.  sub.w d0,d1
  4073.  move.w d1,d0
  4074.  neg.w d0
  4075. nonegy:
  4076.  
  4077.  cmp.w #-127,d0
  4078.  bge.b nonegy2
  4079.  move.w #255,d1
  4080.  add.w d0,d1
  4081.  move.w d1,d0
  4082. nonegy2:
  4083.  
  4084.  add.b d0,d2
  4085.  add.w d0,oldy2
  4086.  move.w d2,oldmy
  4087.  move.w d2,d0
  4088.  
  4089.  move.w oldy2,d0
  4090.  move.w d0,ymouse
  4091.  
  4092.  clr.l d0
  4093.  clr.l d1
  4094.  move.w $a(a6),d0
  4095.  ext.w d0
  4096.  ext.l d0
  4097.  move.w d0,d3
  4098.  move.w oldmx,d2
  4099.  sub.w d2,d0
  4100.  
  4101.  cmp.w #127,d0
  4102.  blt.b nonegx
  4103.  move.w #255,d1
  4104.  sub.w d0,d1
  4105.  move.w d1,d0
  4106.  neg.w d0
  4107. nonegx:
  4108.  
  4109.  cmp.w #-127,d0
  4110.  bge.b nonegx2
  4111.  move.w #255,d1
  4112.  add.w d0,d1
  4113.  move.w d1,d0
  4114. nonegx2:
  4115.  
  4116.  add.b d0,d2
  4117.  move.w d0,d1
  4118.  move.w d2,oldmx
  4119.  
  4120.  move.w #$0,$dff034
  4121.  
  4122.  add.w d0,oldx2
  4123.  move.w oldx2,d0
  4124.  and.w #2047,d0
  4125.  move.w d0,oldx2
  4126.  
  4127.  asl.w #2,d0
  4128.  sub.w prevx,d0
  4129.  add.w d0,prevx
  4130.  add.w d0,angpos
  4131.  move.w #0,lrs
  4132.  rts
  4133.  
  4134. noturn:
  4135.  
  4136. ; got to move lr instead. 
  4137.  
  4138. ; d1 = speed moved l/r
  4139.  
  4140.  move.w d1,lrs
  4141.  
  4142.  rts
  4143.  
  4144. lrs: dc.w 0
  4145. prevx: dc.w 0
  4146.  
  4147. angpos: dc.w 0
  4148. mang: dc.w 0
  4149. oldymouse: dc.w 0
  4150. xmouse: dc.w 0
  4151. ymouse: dc.w 0
  4152. oldx2: dc.w 0
  4153. oldmx: dc.w 0
  4154. oldmy: dc.w 0
  4155. oldy2: dc.w 0
  4156.  
  4157. RotateLevelPts:
  4158.  
  4159.  move.w sinval,d6
  4160.  swap d6
  4161.  move.w cosval,d6
  4162.  
  4163.  move.l PointsToRotatePtr,a0
  4164.  move.l Points,a3
  4165.  move.l #Rotated,a1
  4166.  move.l #OnScreen,a2
  4167.  move.w xoff,d4
  4168.  move.w zoff,d5
  4169.  
  4170. ; move.w #$c40,$dff106
  4171. ; move.w #$f00,$dff180
  4172.  
  4173. pointrotlop:
  4174.  move.w (a0)+,d7
  4175.  blt.s outofpointrot
  4176.  
  4177.  move.w (a3,d7*4),d0
  4178.  sub.w d4,d0
  4179.  move.w d0,d2
  4180.  move.w 2(a3,d7*4),d1
  4181.  sub.w d5,d1
  4182.  muls d6,d2
  4183.  swap d6
  4184.  move.w d1,d3
  4185.  muls d6,d3
  4186.  sub.l d3,d2
  4187.  add.l d2,d2
  4188.  swap d2
  4189.  ext.l d2
  4190.  asl.l #7,d2
  4191.  add.l xwobble,d2
  4192.  move.l d2,(a1,d7*8)
  4193.  
  4194.  muls d6,d0
  4195.  swap d6
  4196.  muls d6,d1
  4197.  add.l d0,d1
  4198.  asl.l #2,d1
  4199.  swap d1
  4200.  move.l d1,4(a1,d7*8)
  4201.  
  4202.  tst.w d1
  4203.  bgt.s ptnotbehind
  4204.  tst.w d2
  4205.  bgt.s onrightsomewhere
  4206.  move.w #0,d2
  4207.  bra.b putin
  4208. onrightsomewhere:
  4209.  move.w #96,d2
  4210.  bra.b putin
  4211. ptnotbehind:
  4212.  
  4213.  divs d1,d2
  4214.  add.w #47,d2
  4215. putin:
  4216.  move.w d2,(a2,d7*2)
  4217.  
  4218.  bra.b pointrotlop
  4219. outofpointrot:
  4220.  
  4221. ; move.w #$c40,$dff106
  4222. ; move.w #$ff0,$dff180
  4223.  
  4224.  rts
  4225.  
  4226. PLR1_ObjDists
  4227.  ds.w 250
  4228. PLR2_ObjDists
  4229.  ds.w 250
  4230.  
  4231. CalcPLR1InLine:
  4232.  
  4233.  move.w PLR1_sinval,d5
  4234.  move.w PLR1_cosval,d6
  4235.  move.l ObjectData,a4
  4236.  move.l ObjectPoints,a0
  4237.  move.w NumObjectPoints,d7
  4238.  move.l #PLR1_ObsInLine,a2
  4239.  move.l #PLR1_ObjDists,a3
  4240.  
  4241. .objpointrotlop:
  4242.  
  4243.  move.w (a0),d0
  4244.  sub.w PLR1_xoff,d0
  4245.  move.w 4(a0),d1
  4246.  addq #8,a0
  4247.  
  4248.  tst.w 12(a4)
  4249.  blt.b .noworkout
  4250.  
  4251.  moveq #0,d2
  4252.  move.b 16(a4),d2
  4253.  move.l #ColBoxTable,a6
  4254.  lea (a6,d2.w*8),a6
  4255.  
  4256.  sub.w PLR1_zoff,d1
  4257.  move.w d0,d2
  4258.  muls d6,d2
  4259.  move.w d1,d3
  4260.  muls d5,d3
  4261.  sub.l d3,d2
  4262.  add.l d2,d2
  4263.  
  4264.  bgt.s .okh
  4265.  neg.l d2
  4266. .okh:
  4267.  swap d2
  4268.  
  4269.  muls d5,d0
  4270.  muls d6,d1
  4271.  add.l d0,d1
  4272.  asl.l #2,d1
  4273.  swap d1
  4274.  moveq #0,d3
  4275.  
  4276.  tst.w d1
  4277.  ble.s .notinline
  4278.  asr.w #1,d2
  4279.  cmp.w (a6),d2
  4280.  bgt.s .notinline
  4281.  
  4282.  st d3
  4283. .notinline
  4284.  move.b d3,(a2)+
  4285.  
  4286.  move.w d1,(a3)+
  4287.  
  4288.  lea 64(a4),a4
  4289.  dbra d7,.objpointrotlop
  4290.  
  4291.  rts
  4292.  
  4293. .noworkout:
  4294.  move.b #0,(a2)+
  4295.  move.w #0,(a3)+
  4296.  lea 64(a4),a4
  4297.  dbra d7,.objpointrotlop
  4298.  rts
  4299.  
  4300.  
  4301. CalcPLR2InLine:
  4302.  
  4303.  move.w PLR2_sinval,d5
  4304.  move.w PLR2_cosval,d6
  4305.  move.l ObjectData,a4
  4306.  move.l ObjectPoints,a0
  4307.  move.w NumObjectPoints,d7
  4308.  move.l #PLR2_ObsInLine,a2
  4309.  move.l #PLR2_ObjDists,a3
  4310.  
  4311. .objpointrotlop:
  4312.  
  4313.  move.w (a0),d0
  4314.  sub.w PLR2_xoff,d0
  4315.  move.w 4(a0),d1
  4316.  addq #8,a0
  4317.  
  4318.  tst.w 12(a4)
  4319.  blt.b .noworkout
  4320.  
  4321.  moveq #0,d2
  4322.  move.b 16(a4),d2
  4323.  move.l #ColBoxTable,a6
  4324.  lea (a6,d2.w*8),a6
  4325.  
  4326.  sub.w PLR2_zoff,d1
  4327.  move.w d0,d2
  4328.  muls d6,d2
  4329.  move.w d1,d3
  4330.  muls d5,d3
  4331.  sub.l d3,d2
  4332.  add.l d2,d2
  4333.  
  4334.  bgt.s .okh
  4335.  neg.l d2
  4336. .okh:
  4337.  swap d2
  4338.  
  4339.  muls d5,d0
  4340.  muls d6,d1
  4341.  add.l d0,d1
  4342.  asl.l #2,d1
  4343.  swap d1
  4344.  moveq #0,d3
  4345.  
  4346.  tst.w d1
  4347.  ble.s .notinline
  4348.  asr.w #1,d2
  4349.  cmp.w (a6),d2
  4350.  bgt.s .notinline
  4351.  
  4352.  st d3
  4353. .notinline
  4354.  move.b d3,(a2)+
  4355.  
  4356.  move.w d1,(a3)+
  4357.  
  4358.  lea 64(a4),a4
  4359.  dbra d7,.objpointrotlop
  4360.  
  4361.  rts
  4362.  
  4363. .noworkout:
  4364.  move.w #0,(a3)+
  4365.  move.b #0,(a2)+
  4366.  lea 64(a4),a4
  4367.  dbra d7,.objpointrotlop
  4368.  rts
  4369.  
  4370.  
  4371. RotateObjectPts:
  4372.  
  4373.  move.w sinval,d5
  4374.  move.w cosval,d6
  4375.  
  4376.  move.l ObjectData,a4
  4377.  move.l ObjectPoints,a0
  4378.  move.w NumObjectPoints,d7
  4379.  move.l #ObjRotated,a1
  4380.  
  4381. .objpointrotlop:
  4382.  
  4383.  move.w (a0),d0
  4384.  sub.w xoff,d0
  4385.  move.w 4(a0),d1
  4386.  addq #8,a0
  4387.  
  4388.  tst.w 12(a4)
  4389.  blt.b .noworkout
  4390.  
  4391.  sub.w zoff,d1
  4392.  move.w d0,d2
  4393.  muls d6,d2
  4394.  move.w d1,d3
  4395.  muls d5,d3
  4396.  sub.l d3,d2
  4397.  
  4398.  
  4399.  add.l d2,d2
  4400.  swap d2
  4401.  move.w d2,(a1)+
  4402.  
  4403.  muls d5,d0
  4404.  muls d6,d1
  4405.  add.l d0,d1
  4406.  asl.l #2,d1
  4407.  swap d1
  4408.  moveq #0,d3
  4409.  
  4410.  move.w d1,(a1)+
  4411.  ext.l d2
  4412.  asl.l #7,d2
  4413.  add.l xwobble,d2
  4414.  move.l d2,(a1)+
  4415.  sub.l xwobble,d2
  4416.  
  4417.  lea 64(a4),a4
  4418.  dbra d7,.objpointrotlop
  4419.  
  4420.  rts
  4421.  
  4422. .noworkout:
  4423.   move.l #0,(a1)+
  4424.   move.l #0,(a1)+
  4425.   lea 64(a4),a4
  4426.   dbra d7,.objpointrotlop
  4427.   rts
  4428.  
  4429. LightDraw:
  4430.  
  4431.  move.w (a0)+,d0
  4432.  move.w (a0)+,d1
  4433.  move.l #Rotated,a1
  4434.  move.w 6(a1,d0.w*8),d2
  4435.  ble.s oneendbehind
  4436.  move.w 6(a1,d1.w*8),d3
  4437.  bgt.s bothendsinfront
  4438.  
  4439. oneendbehind:
  4440.  rts
  4441. bothendsinfront:
  4442.  
  4443.  move.l #OnScreen,a2
  4444.  move.w (a2,d0.w*2),d0
  4445.  bge.s okleftend
  4446.  moveq #0,d0
  4447. okleftend:
  4448.  move.w (a2,d1.w*2),d1
  4449.  bgt.s somevis
  4450.  rts
  4451. somevis:
  4452.  cmp.w #95,d0
  4453.  ble.s somevis2
  4454.  rts
  4455. somevis2:
  4456.  cmp.w #95,d1
  4457.  ble.s okrightend
  4458.  move.w #95,d1
  4459. okrightend:
  4460.  
  4461.  sub.w d0,d1
  4462.  blt.s wrongbloodywayround
  4463.  move.l #brightentab,a4
  4464.  move.l #objintocop,a1
  4465.  lea (a1,d0.w*2),a1
  4466.  
  4467.  move.l frompt,a3
  4468.  move.w #104*4,d6
  4469.  move.w #79,d2
  4470. lacross:
  4471.  move.w d2,d3
  4472.  move.l a3,a2
  4473.  adda.w (a1)+,a2
  4474. ldown:
  4475.  add.w d6,a2
  4476.  move.w (a2),d7
  4477.  move.w (a4,d7.w*2),(a2)
  4478.  dbra d3,ldown
  4479.  dbra d1,lacross
  4480.  
  4481. wrongbloodywayround:
  4482.  
  4483.  rts
  4484.  
  4485. FaceToPlace: dc.w 0
  4486.  
  4487. Cheese:
  4488.  dc.w 4,15
  4489.  
  4490. FacesList:
  4491.  dc.w 0,4*4
  4492.  dc.w 1,2*4
  4493.  dc.w 0,2*4
  4494.  dc.w 2,2*4
  4495.  dc.w 0,2*4
  4496.  dc.w 1,3*4
  4497.  dc.w 0,2*4
  4498.  dc.w 2,3*4
  4499.  dc.w 0,5*4
  4500.  dc.w 1,2*4
  4501.  dc.w 0,2*4
  4502.  dc.w 2,2*4
  4503.  dc.w 0,2*4
  4504.  dc.w 1,2*4
  4505.  dc.w 0,2*4
  4506.  dc.w 2,3*4
  4507.  dc.w 0,1*4
  4508.  dc.w 1,3*4
  4509.  dc.w 0,1*4
  4510.  dc.w 2,3*4
  4511.  dc.w 0,1*4
  4512.  
  4513. EndOfFacesList:
  4514.  
  4515. FacesPtr:
  4516.  dc.l FacesList
  4517. FacesCounter:
  4518.  dc.w 0
  4519. Expression:
  4520.  dc.w 0
  4521.  
  4522. PlaceFace:
  4523.  
  4524.  move.w FacesCounter,d0
  4525.  subq #1,d0
  4526.  bgt.s NoNewFace
  4527.  
  4528.  move.l FacesPtr,a0
  4529.  
  4530.  move.w 2(a0),d0
  4531.  move.w (a0),Expression
  4532.  addq #4,a0
  4533.  cmp.l #EndOfFacesList,a0
  4534.  blt.s NotFirstFace
  4535.  
  4536.  move.l #FacesList,a0
  4537.  
  4538. NotFirstFace
  4539.  move.l a0,FacesPtr
  4540.  
  4541. NoNewFace:
  4542.  
  4543.  move.w d0,FacesCounter
  4544.  
  4545.  Move.w FaceToPlace,d0
  4546.  muls #5,d0
  4547.  add.w Expression,d0
  4548.  move.l #FacePlace+10,a0
  4549.  move.l #Faces,a1
  4550.  muls #(4*32*5),d0
  4551.  adda.w d0,a1
  4552.  move.w #4,d0
  4553.  move.w #24,d1
  4554.  
  4555.  move.w #4,d3
  4556. bitplaneloop:
  4557.  move.w #31,d2
  4558. PlaceFaceToPlaceInFacePlaceLoop:
  4559.  move.l (a1),(a0)
  4560.  adda.w d0,a1
  4561.  adda.w d1,a0
  4562.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4563.  dbra d3,bitplaneloop
  4564.  
  4565.  rts
  4566.  
  4567. Energy:
  4568.  dc.w 191
  4569. OldEnergy:
  4570.  dc.w 191
  4571. Ammo: dc.w 63
  4572. OldAmmo: dc.w 63
  4573.  
  4574. FullEnergy:
  4575.  move.w #127,Energy
  4576.  move.w #127,OldEnergy
  4577.  move.l #health,a0
  4578.  move.l #borders,a1
  4579.  lea 25*8*2+6(a1),a1
  4580.  lea 2592(a1),a2
  4581.  move.w #127,d0
  4582. PutInFull:
  4583.  move.b (a0)+,(a1)
  4584.  move.b (a0)+,8(a1)
  4585.  lea 16(a1),a1
  4586.  move.b (a0)+,(a2)
  4587.  move.b (a0)+,8(a2)
  4588.  lea 16(a2),a2
  4589.  dbra d0,PutInFull
  4590.  
  4591.  rts
  4592.  
  4593. EnergyBar:
  4594.  
  4595.  move.w Energy,d0
  4596.  bgt.s .noeneg
  4597.  move.w #0,d0
  4598. .noeneg:
  4599.  move.w d0,Energy
  4600.  
  4601.  cmp.w OldEnergy,d0
  4602.  bne.s gottochange
  4603.  
  4604. NoChange
  4605.  rts
  4606.  
  4607. gottochange:
  4608.   
  4609.  blt.b LessEnergy
  4610.  cmp.w #127,Energy
  4611.  blt.s NotMax
  4612.  move.w #127,Energy
  4613. NotMax:
  4614.  
  4615.  move.w Energy,d0
  4616.  move.w OldEnergy,d2
  4617.  sub.w d0,d2
  4618.  beq.s NoChange    
  4619.  neg.w d2
  4620.  
  4621.  move.w #127,d3
  4622.  sub.w d0,d3
  4623.  
  4624.  move.l #health,a0
  4625.  lea (a0,d3.w*4),a0
  4626.  move.l #borders+25*16+6,a1
  4627.  lsl.w #4,d3
  4628.  add.w d3,a1
  4629.  lea 2592(a1),a2
  4630.  
  4631. EnergyRise:
  4632.  move.b (a0)+,(a1)
  4633.  move.b (a0)+,8(a1)
  4634.  lea 16(a1),a1
  4635.  move.b (a0)+,(a2)
  4636.  move.b (a0)+,8(a2)
  4637.  lea 16(a2),a2
  4638.  subq #1,d2
  4639.  bgt.s EnergyRise
  4640.  
  4641.  move.w Energy,OldEnergy
  4642.  
  4643.  rts 
  4644.  
  4645. LessEnergy: 
  4646.  move.w OldEnergy,d2
  4647.  sub.w d0,d2
  4648.  
  4649.  move.w #127,d3
  4650.  sub.w OldEnergy,d3
  4651.  
  4652.  move.l #borders+25*16+6,a1
  4653.  asl.w #4,d3
  4654.  add.w d3,a1
  4655.  lea 2592(a1),a2
  4656.  
  4657. EnergyDrain:
  4658.  move.b #0,(a1)
  4659.  move.b #0,8(a1)
  4660.  move.b #0,(a2)
  4661.  move.b #0,8(a2)
  4662.  lea 16(a1),a1
  4663.  lea 16(a2),a2
  4664.  subq #1,d2
  4665.  bgt.s EnergyDrain
  4666.  
  4667.  move.w Energy,OldEnergy
  4668.  
  4669.  rts 
  4670.  
  4671. AmmoBar:
  4672.  
  4673.  move.w Ammo,d0
  4674.  cmp.w OldAmmo,d0
  4675.  bne.s .gottochange
  4676.  
  4677. .NoChange
  4678.  rts
  4679.  
  4680. .gottochange:
  4681.   
  4682.  blt.b LessAmmo
  4683.  cmp.w #63,Ammo
  4684.  blt.s .NotMax
  4685.  move.w #63,Ammo
  4686. .NotMax:
  4687.  
  4688.  move.w Ammo,d0
  4689.  move.w OldAmmo,d2
  4690.  sub.w d0,d2
  4691.  beq.s .NoChange
  4692.  neg.w d2
  4693.  
  4694.  move.w #63,d3
  4695.  sub.w d0,d3
  4696.  
  4697.  move.l #Ammunition,a0
  4698.  lea (a0,d3.w*8),a0
  4699.  move.l #borders+5184+25*16+1,a1
  4700.  lsl.w #5,d3
  4701.  add.w d3,a1
  4702.  lea 2592(a1),a2
  4703.  
  4704. AmmoRise:
  4705.  move.b (a0)+,(a1)
  4706.  move.b (a0)+,8(a1)
  4707.  lea 16(a1),a1
  4708.  move.b (a0)+,(a2)
  4709.  move.b (a0)+,8(a2)
  4710.  lea 16(a2),a2
  4711.  move.b (a0)+,(a1)
  4712.  move.b (a0)+,8(a1)
  4713.  lea 16(a1),a1
  4714.  move.b (a0)+,(a2)
  4715.  move.b (a0)+,8(a2)
  4716.  lea 6(a2),a2
  4717.  subq #1,d2
  4718.  bgt.s AmmoRise
  4719.  
  4720.  move.w Ammo,OldAmmo
  4721.  
  4722.  rts 
  4723.  
  4724.  
  4725. LessAmmo: 
  4726.  move.w OldAmmo,d2
  4727.  sub.w d0,d2
  4728.  
  4729.  move.w #63,d3
  4730.  sub.w OldAmmo,d3
  4731.  
  4732.  move.l #borders++5184+25*16+1,a1
  4733.  asl.w #5,d3
  4734.  add.w d3,a1
  4735.  lea 2592(a1),a2
  4736.  
  4737. AmmoDrain:
  4738.  move.b #0,(a1)
  4739.  move.b #0,8(a1)
  4740.  move.b #0,(a2)
  4741.  move.b #0,8(a2)
  4742.  lea 16(a1),a1
  4743.  lea 16(a2),a2
  4744.  move.b #0,(a1)
  4745.  move.b #0,8(a1)
  4746.  move.b #0,(a2)
  4747.  move.b #0,8(a2)
  4748.  lea 16(a1),a1
  4749.  lea 16(a2),a2
  4750.  subq #1,d2
  4751.  bgt.s AmmoDrain
  4752.  
  4753.  move.w Ammo,OldAmmo
  4754.  
  4755.  rts 
  4756.  
  4757. nulop:
  4758.  move.w #$0010,$dff000+intreq
  4759.  rte
  4760.  
  4761. doanything: dc.w 0
  4762.  
  4763. end:
  4764.  
  4765.  clr.b doanything
  4766.  
  4767.  move.w PLR1_energy,Energy
  4768.  cmp.b #'s',mors
  4769.  bne.s .notsl
  4770.  move.w PLR2_energy,Energy
  4771. .notsl:
  4772.  
  4773.  bsr EnergyBar
  4774.  
  4775.  move.l drawpt,d0
  4776.  move.l olddrawpt,drawpt
  4777.  move.l d0,olddrawpt
  4778.  move.l d0,$dff084
  4779.  
  4780.  
  4781.  cmp.b #'b',Prefsfile+3
  4782.  bne.s .noback
  4783.  jsr mt_end
  4784. .noback
  4785.  tst.w Energy
  4786.  bgt.s wevewon
  4787.  
  4788.  move.l #gameover,mt_data
  4789.  st UseAllChannels
  4790.  clr.b reachedend
  4791.  jsr mt_init
  4792. playgameover:
  4793.  move.l #$dff000,a6
  4794. waitfortop2:
  4795.  btst.b #0,intreqrl(a6)
  4796.  beq.b waitfortop2
  4797.  move.w #$1,intreq(a6)
  4798.  
  4799.  jsr mt_music
  4800.  
  4801.  tst.b reachedend
  4802.  beq.s playgameover
  4803.  
  4804.  bra.b wevelost
  4805.  
  4806.  
  4807. wevewon:
  4808.  
  4809.  cmp.b #'n',mors
  4810.  bne.s .nonextlev
  4811.  addq.w #1,MAXLEVEL
  4812.  st FINISHEDLEVEL
  4813. .nonextlev:
  4814.  
  4815.  move.l #welldone,mt_data
  4816.  st UseAllChannels
  4817.  clr.b reachedend
  4818.  jsr mt_init
  4819. playwelldone:
  4820.  move.l #$dff000,a6
  4821. waitfortop3:
  4822.  btst.b #0,intreqrl(a6)
  4823.  beq.b waitfortop3
  4824.  move.w #$1,intreq(a6)
  4825.  
  4826.  jsr mt_music
  4827.  
  4828.  tst.b reachedend
  4829.  beq.s playwelldone
  4830.  
  4831.  cmp.w #16,MAXLEVEL
  4832.  bne.b .noendgame
  4833.  jsr ENDGAMESCROLL
  4834. .noendgame:
  4835.  
  4836. wevelost:
  4837.  
  4838.  PROTICHECK a0
  4839.  
  4840.  jmp closeeverything 
  4841.  
  4842. endnomusic
  4843.  clr.b doanything
  4844.  cmp.b #'b',Prefsfile+3
  4845.  bne.s .noback
  4846.  jsr mt_end
  4847. .noback
  4848. *******************************
  4849. ; cmp.b #'n',mors
  4850. ; bne.s .nonextlev
  4851. ; cmp.w #15,MAXLEVEL
  4852. ; bge.s .nonextlev
  4853. ; add.w #1,MAXLEVEL
  4854. ; st FINISHEDLEVEL
  4855. ;.nonextlev:
  4856. ******************************
  4857.  
  4858.  jmp closeeverything
  4859.  
  4860. do32:
  4861.  move.w #31,d7
  4862.  move.w #$180,d1
  4863. across:
  4864.  move.w d1,(a1)+
  4865.  move.w d1,(a3)+
  4866.  move.w #0,(a1)+ 
  4867.  move.w #0,(a3)+
  4868.  addq.w #2,d1
  4869.  dbra d7,across
  4870.  rts
  4871.  
  4872. ENDGAMESCROLL:
  4873.  include "endscroll.s"
  4874.  
  4875. ***********************************
  4876.  include "ab3:source/CD32JOY"
  4877.  
  4878.  
  4879.  
  4880. *************************************
  4881. * Set left and right clip values
  4882. *************************************
  4883.  
  4884.  
  4885.  
  4886. NEWsetlclip:
  4887.  move.l #OnScreen,a1
  4888.  move.l #Rotated,a2
  4889.  move.l CONNECT_TABLE,a3
  4890.  
  4891.  move.w (a0),d0
  4892.  bge.s .notignoreleft
  4893.  
  4894. ; move.l #0,(a6)
  4895.  
  4896.  bra.b .leftnotoktoclip
  4897. .notignoreleft:
  4898.  
  4899.  move.w 6(a2,d0*8),d3    ; left z val
  4900.  bgt.s .leftclipinfront
  4901.  addq #2,a0
  4902.  rts
  4903.  
  4904.  tst.w 6(a2,d0*8)
  4905.  bgt.s .leftnotoktoclip
  4906. .ignoreboth:
  4907. ; move.l #0,(a6)
  4908. ; move.l #96*65536,4(a6)
  4909.  move.w #0,leftclip
  4910.  move.w #96,rightclip
  4911.  addq #8,a6
  4912.  addq #2,a0
  4913.  rts
  4914.  
  4915. .leftclipinfront:
  4916.  move.w (a1,d0*2),d1    ; left x on screen
  4917.  move.w (a0),d2
  4918.  move.w 2(a3,d2.w*4),d2
  4919.  move.w (a1,d2.w*2),d2
  4920.  cmp.w d1,d2
  4921.  bgt.s .leftnotoktoclip
  4922.  
  4923. ; move.w d1,(a6)
  4924. ; move.w d3,2(a6)
  4925.  cmp.w leftclip,d1
  4926.  ble.s .leftnotoktoclip
  4927.  move.w d1,leftclip
  4928. .leftnotoktoclip:
  4929.  
  4930.  addq #2,a0
  4931.  
  4932.  rts
  4933.  
  4934. NEWsetrclip
  4935.  move.l #OnScreen,a1
  4936.  move.l #Rotated,a2
  4937.  move.l CONNECT_TABLE,a3
  4938.  move.w (a0),d0
  4939.  bge.s .notignoreright
  4940. ; move.w #96,4(a6)
  4941. ; move.w #0,6(a6)
  4942.  move.w #0,d4
  4943.  bra.b .rightnotoktoclip
  4944. .notignoreright:
  4945.  move.w 6(a2,d0*8),d4    ; right z val
  4946.  bgt.s .rightclipinfront
  4947. ; move.w #96,4(a6)
  4948. ; move.w #0,6(a6)
  4949.  bra.s .rightnotoktoclip
  4950.  
  4951. .rightclipinfront:
  4952.  move.w (a1,d0*2),d1    ; right x on screen
  4953.  move.w (a0),d2
  4954.  move.w (a3,d2.w*4),d2
  4955.  move.w (a1,d2.w*2),d2
  4956.  cmp.w d1,d2
  4957.  blt.s .rightnotoktoclip
  4958. ; move.w d1,4(a6)
  4959. ; move.w d4,6(a6)
  4960.  
  4961.  cmp.w rightclip,d1
  4962.  bge.s .rightnotoktoclip
  4963.  addq #1,d1
  4964.  move.w d1,rightclip
  4965. .rightnotoktoclip:
  4966.  addq #8,a6
  4967.  addq #2,a0
  4968.  rts
  4969.  
  4970. FIRSTsetlrclip:
  4971.  move.l #OnScreen,a1
  4972.  move.l #Rotated,a2
  4973.  
  4974.  move.w (a0)+,d0
  4975.  bge.s .notignoreleft
  4976.  bra.b .leftnotoktoclip
  4977. .notignoreleft:
  4978.  
  4979.  move.w 6(a2,d0*8),d3    ; left z val
  4980.  bgt.s .leftclipinfront
  4981.  
  4982.  move.w (a0),d0
  4983.  blt.s .ignoreboth
  4984.  tst.w 6(a2,d0*8)
  4985.  bgt.s .leftnotoktoclip
  4986. .ignoreboth
  4987.  move.w #96,rightclip
  4988.  move.w #0,leftclip
  4989.  addq #2,a0
  4990.  rts
  4991.  
  4992. .leftclipinfront:
  4993.  move.w (a1,d0*2),d1    ; left x on screen
  4994.  cmp.w leftclip,d1
  4995.  ble.s .leftnotoktoclip
  4996.  move.w d1,leftclip
  4997. .leftnotoktoclip:
  4998.  
  4999.  move.w (a0)+,d0
  5000.  bge.s .notignoreright
  5001.  move.w #0,d4
  5002.  bra.b .rightnotoktoclip
  5003. .notignoreright:
  5004.  move.w 6(a2,d0*8),d4    ; right z val
  5005.  ble.s .rightnotoktoclip
  5006.  
  5007. .rightclipinfront:
  5008.  move.w (a1,d0*2),d1    ; right x on screen
  5009.  addq #1,d1
  5010.  cmp.w rightclip,d1
  5011.  bge.s .rightnotoktoclip
  5012.  move.w d1,rightclip
  5013. .rightnotoktoclip:
  5014.  
  5015. ; move.w leftclip,d0
  5016. ; move.w rightclip,d1
  5017. ; cmp.w d0,d1
  5018. ; bge.s .noswap
  5019. ; move.w #96,rightclip
  5020. ; move.w #0,leftclip
  5021. ;.noswap:
  5022.  
  5023.  rts
  5024.  
  5025.  
  5026. leftclip2: dc.w 0
  5027. rightclip2: dc.w 0
  5028. ZoneBright: dc.w 0
  5029.  
  5030. npolys: dc.w 0
  5031.  
  5032. PLR1_fire: dc.b 0
  5033. PLR2_fire: dc.b 0
  5034.  
  5035. *****************************************************
  5036.  
  5037.  
  5038. pastdata:
  5039. ***********************************
  5040. * This routine animates brightnesses.
  5041.  
  5042.  
  5043. liftpt: dc.l liftanimtab
  5044.  
  5045. brightpt:
  5046.  dc.l brightanimtab
  5047.  
  5048.  
  5049. liftanim:
  5050.  rts
  5051.  
  5052. ******************************
  5053.  include "ab3:source/ObjectMove"
  5054.  include "ab3:source/Anims"
  5055. ******************************
  5056. startpass:
  5057. ; include "ab3:source/password_reloc.s"
  5058. endpass:
  5059.  
  5060. rotanimpt: dc.w 0
  5061. xradd: dc.w 5
  5062. yradd: dc.w 8
  5063. xrpos: dc.w 320
  5064. yrpos: dc.w 320
  5065.  
  5066. rotanim:
  5067.  rts
  5068.  
  5069. option:
  5070.  dc.l 0,0
  5071.  
  5072. ********** WALL STUFF *******************************
  5073.  
  5074.  include "AB3:source/wallroutine3.chipmem"
  5075.  
  5076. *****************************************************
  5077.  
  5078. ******************************************
  5079. * floor polygon
  5080.  
  5081. numsidestd: dc.w 0
  5082. bottomline: dc.w 0
  5083.  
  5084. checkforwater:
  5085.  tst.b usewater
  5086.  beq.s .notwater
  5087.  
  5088.  move.l Roompt,a1
  5089.  move.w (a1),d7
  5090.  cmp.w currzone,d7
  5091.  bne.s .notwater
  5092.  
  5093.  move.b #$f,fillscrnwater
  5094.  
  5095. .notwater:
  5096.  move.w (a0)+,d6    ; sides-1
  5097.  add.w d6,d6
  5098.  add.w d6,a0
  5099.  lea 4+6(a0),a0
  5100.  rts
  5101.  
  5102.  rts
  5103.  
  5104. NewCornerBuff:
  5105.  ds.l 100
  5106. CLRNOFLOOR: dc.w 0
  5107.  
  5108. itsafloordraw:
  5109.  
  5110. * If D0 =1 then its a floor otherwise (=2) it's
  5111. * a roof.
  5112.  
  5113.  move.w #0,above
  5114.  move.w (a0)+,d6    ; ypos of poly
  5115.  
  5116.  move.w d6,d7
  5117.  ext.l d7
  5118.  asl.l #6,d7
  5119.  cmp.l TOPOFROOM,d7
  5120.  blt checkforwater
  5121.  cmp.l BOTOFROOM,d7
  5122.  bgt.s dontdrawreturn
  5123.  
  5124.  move.w leftclip(pc),d7
  5125.  cmp.w rightclip(pc),d7
  5126.  bge.s dontdrawreturn
  5127.  
  5128.  move.w botclip,d7
  5129.  sub.w #40,d7
  5130.  ble.s dontdrawreturn
  5131.  sub.w flooryoff,d6
  5132.  bgt.s below
  5133.  blt.s aboveplayer
  5134.  
  5135.  tst.b usewater
  5136.  beq.s .notwater
  5137.  
  5138.  move.l Roompt,a1
  5139.  move.w (a1),d7
  5140.  cmp.w currzone,d7
  5141.  
  5142.  bne.s .notwater
  5143.  
  5144.  st fillscrnwater
  5145.  
  5146. .notwater:
  5147.  
  5148.  
  5149. dontdrawreturn:
  5150.  move.w (a0)+,d6    ; sides-1
  5151.  add.w d6,d6
  5152.  add.w d6,a0
  5153.  lea 4+6(a0),a0
  5154.  rts
  5155. aboveplayer:
  5156.  
  5157.  tst.b usewater
  5158.  beq.s .notwater
  5159.  
  5160.  move.l Roompt,a1
  5161.  move.w (a1),d7
  5162.  cmp.w currzone,d7
  5163.  bne.s .notwater
  5164.  
  5165.  move.b #$f,fillscrnwater
  5166.  
  5167. .notwater:
  5168.  
  5169.  btst #1,d0
  5170.  beq.s dontdrawreturn
  5171.  move.w #40,d7
  5172.  sub.w topclip,d7 
  5173.  ble.s dontdrawreturn
  5174.  move.w #1,d0
  5175.  move.w d0,above
  5176.  neg.w d6
  5177. below:
  5178.  btst #0,d0
  5179.  beq.s dontdrawreturn
  5180.  move.w d6,distaddr
  5181.  muls #64,d6
  5182.  move.l d6,ypos
  5183.  divs d7,d6        ; zpos of bottom
  5184.             ; visible line
  5185.  move.w d6,minz
  5186.  move.w d7,bottomline
  5187.  
  5188. ; Go round each point finding out
  5189. ; if it should be visible or not.
  5190.  
  5191.  move.l a0,-(a7)
  5192.  
  5193.  move.w (a0)+,d7    ; number of sides
  5194.  move.l #Rotated,a1
  5195.  move.l #OnScreen,a2
  5196.  move.l #NewCornerBuff,a3
  5197.  moveq #0,d4
  5198.  moveq #0,d5
  5199.  moveq #0,d6
  5200.  clr.b anyclipping
  5201.  
  5202. cornerprocessloop:
  5203.  
  5204.  move.w (a0)+,d0
  5205.  move.w 6(a1,d0.w*8),d1
  5206.  ble.b  .canttell
  5207.  
  5208.  move.w (a2,d0.w*2),d3
  5209.  cmp.w leftclip,d3
  5210.  bgt.s .nol
  5211.  st d4
  5212.  st anyclipping
  5213.  bra.s .nos
  5214. .nol:
  5215.  cmp.w rightclip,d3
  5216.  blt.s .nor
  5217.  st d6
  5218.  st anyclipping
  5219.  bra.s .nos
  5220. .nor:
  5221.  st d5
  5222. .nos:
  5223.  bra.b .cantell
  5224.  
  5225. .canttell:
  5226.  st d5
  5227.  st anyclipping
  5228.  
  5229. .cantell:
  5230.  
  5231.  
  5232.  dbra d7,cornerprocessloop
  5233.  
  5234.  move.l (a7)+,a0
  5235.  tst.b d5
  5236.  bne.s somefloortodraw
  5237.  eor.b d4,d6
  5238.  bne dontdrawreturn
  5239.  
  5240. somefloortodraw:
  5241.  
  5242.  tst.b gourfloor
  5243.  bne goursides
  5244.  
  5245.  move.w #80,top
  5246.  move.w #-1,bottom
  5247.  move.w #0,drawit
  5248.  move.l #Rotated,a1
  5249.  move.l #OnScreen,a2
  5250.  move.w (a0)+,d7    ; no of sides
  5251. sideloop:
  5252.  move.w minz,d6
  5253.  move.w (a0)+,d1
  5254.  move.w (a0),d3
  5255.  move.w 6(a1,d1*8),d4    ;first z
  5256.  cmp.w d6,d4
  5257.  bgt.b firstinfront
  5258.  move.w 6(a1,d3*8),d5    ; sec z
  5259.  cmp.w d6,d5
  5260.  ble bothbehind
  5261. ** line must be on left and partially behind.
  5262.  sub.w d5,d4
  5263.  move.l (a1,d1*8),d0
  5264.  sub.l (a1,d3*8),d0
  5265.  asr.l #7,d0
  5266.  sub.w d5,d6
  5267.  muls d6,d0    ; new x coord
  5268.  divs d4,d0
  5269.  ext.l d0
  5270.  asl.l #7,d0
  5271.  
  5272.  add.l (a1,d3*8),d0
  5273.  move.w minz,d4
  5274.  move.w (a2,d3*2),d2
  5275.  divs d4,d0
  5276.  add.w #47,d0
  5277.  move.l ypos,d3
  5278.  divs d5,d3
  5279.  move.w bottomline,d1 
  5280.  bra.b lineclipped
  5281.  
  5282. firstinfront:
  5283.  move.w 6(a1,d3*8),d5    ; sec z
  5284.  cmp.w d6,d5
  5285.  bgt.b bothinfront
  5286. ** line must be on right and partially behind.
  5287.  sub.w d4,d5    ; dz
  5288.  move.l (a1,d3*8),d2
  5289.  sub.l (a1,d1*8),d2    ; dx
  5290.  sub.w d4,d6
  5291.  asr.l #7,d2
  5292.  muls d6,d2    ; new x coord
  5293.  divs d5,d2
  5294.  ext.l d2
  5295.  asl.l #7,d2
  5296.  add.l (a1,d1*8),d2
  5297.  move.w minz,d5
  5298.  move.w (a2,d1*2),d0
  5299.  divs d5,d2
  5300.  add.w #47,d2
  5301.  move.l ypos,d1
  5302.  divs d4,d1
  5303.  move.w bottomline,d3 
  5304.  bra.b lineclipped
  5305.  
  5306. bothinfront:
  5307.  
  5308. * Also, usefully enough, both are on-screen
  5309. * so no bottom clipping is needed.
  5310.  
  5311.  move.w (a2,d1*2),d0    ; first x
  5312.  move.w (a2,d3*2),d2    ; second x
  5313.  move.l ypos,d1
  5314.  move.l d1,d3
  5315.  divs d4,d1        ; first y
  5316.  divs d5,d3        ; second y
  5317. lineclipped:
  5318.  move.l #rightsidetab,a3
  5319.  cmp.w d1,d3
  5320.  beq lineflat
  5321.  st drawit
  5322.  bgt lineonright
  5323.  move.l #leftsidetab,a3
  5324.  exg d1,d3
  5325.  exg d0,d2
  5326.  
  5327.  lea (a3,d1*2),a3
  5328.  
  5329.  cmp.w top(pc),d1
  5330.  bge.s .nonewtop
  5331.  move.w d1,top
  5332. .nonewtop:
  5333.  cmp.w bottom(pc),d3
  5334.  ble.s .nonewbot
  5335.  move.w d3,bottom
  5336. .nonewbot:
  5337.  
  5338.  sub.w d1,d3    ; dy
  5339.  sub.w d0,d2    ; dx
  5340.  
  5341.  blt.b .linegoingleft
  5342.  subq.w #1,d0
  5343.  
  5344.  ext.l d2
  5345.  divs d3,d2
  5346.  move.w d2,d6
  5347.  swap d2
  5348.  
  5349. ; moveq #0,d6
  5350. ; sub.w d3,d2
  5351. ; blt.s .noco
  5352. ;.makeco
  5353. ; addq #1,d6
  5354. ; sub.w d3,d2
  5355. ; bge.s .makeco
  5356. ;.noco
  5357. ; add.w d3,d2
  5358.  
  5359.  move.w d3,d4
  5360.  move.w d3,d5
  5361.  subq #1,d5
  5362.  move.w d6,d1
  5363.  addq #1,d1
  5364.  
  5365. .pixlopright:
  5366.  move.w d0,(a3)+
  5367.  sub.w d2,d4
  5368.  bge.s .nobigstep
  5369.  add.w d1,d0
  5370.  add.w d3,d4
  5371.  dbra d5,.pixlopright
  5372.  bra lineflat
  5373. .nobigstep
  5374.  add.w d6,d0
  5375.  dbra d5,.pixlopright
  5376.  bra lineflat
  5377.  
  5378. .linegoingleft:
  5379.  
  5380.  subq.w #1,d0
  5381.  
  5382.  neg.w d2
  5383.  
  5384.  ext.l d2
  5385.  divs d3,d2
  5386.  move.w d2,d6
  5387.  swap d2
  5388.  
  5389.  
  5390. ; moveq #0,d6
  5391. ; sub.w d3,d2
  5392. ; blt.s .nocol
  5393. ;.makecol
  5394. ; addq #1,d6
  5395. ; sub.w d3,d2
  5396. ; bge.s .makecol
  5397. ;.nocol
  5398. ; add.w d3,d2
  5399.  
  5400.  
  5401.  
  5402.  move.w d3,d4
  5403.  move.w d3,d5
  5404.  subq #1,d5
  5405.  
  5406.  move.w d6,d1
  5407.  addq #1,d1
  5408.  
  5409. .pixlopleft:
  5410.  sub.w d2,d4
  5411.  bge.s .nobigstepl
  5412.  sub.w d1,d0
  5413.  add.w d3,d4
  5414.  move.w d0,(a3)+
  5415.  dbra d5,.pixlopleft
  5416.  bra lineflat
  5417.  
  5418. .nobigstepl
  5419.  sub.w d6,d0
  5420.  move.w d0,(a3)+
  5421.  dbra d5,.pixlopleft
  5422.  bra.b lineflat
  5423.  
  5424. lineonright:
  5425.  
  5426.  lea (a3,d1*2),a3
  5427.  
  5428.  cmp.w top(pc),d1
  5429.  bge.s .nonewtop
  5430.  move.w d1,top
  5431. .nonewtop:
  5432.  cmp.w bottom(pc),d3
  5433.  ble.s .nonewbot
  5434.  move.w d3,bottom
  5435. .nonewbot:
  5436.  
  5437.  sub.w d1,d3    ; dy
  5438.  sub.w d0,d2    ; dx
  5439.  blt.b .linegoingleft
  5440. ; addq #1,d0
  5441.  ext.l d2
  5442.  divs d3,d2
  5443.  move.w d2,d6
  5444.  swap d2
  5445.  
  5446. ; moveq #0,d6
  5447. ; sub.w d3,d2
  5448. ; blt.s .noco
  5449. ;.makeco
  5450. ; addq #1,d6
  5451. ; sub.w d3,d2
  5452. ; bge.s .makeco
  5453. ;.noco
  5454. ; add.w d3,d2
  5455.  
  5456.  move.w d3,d4
  5457.  move.w d3,d5
  5458.  subq #1,d5
  5459.  move.w d6,d1
  5460.  addq #1,d1
  5461.  
  5462. .pixlopright:
  5463.  sub.w d2,d4
  5464.  bge.s .nobigstep
  5465.  add.w d1,d0
  5466.  add.w d3,d4
  5467.  move.w d0,(a3)+
  5468.  dbra d5,.pixlopright
  5469.  bra.b lineflat
  5470.  
  5471. .nobigstep
  5472.  add.w d6,d0
  5473.  move.w d0,(a3)+
  5474.  dbra d5,.pixlopright
  5475.  bra.b lineflat
  5476.  
  5477. .linegoingleft:
  5478. ; addq #1,d0
  5479.  neg.w d2
  5480.  
  5481.  ext.l d2
  5482.  divs d3,d2
  5483.  move.w d2,d6
  5484.  swap d2
  5485.  
  5486.  
  5487. ; moveq #0,d6
  5488. ; sub.w d3,d2
  5489. ; blt.s .nocol
  5490. ;.makecol
  5491. ; addq #1,d6
  5492. ; sub.w d3,d2
  5493. ; bge.s .makecol
  5494. ;.nocol
  5495. ; add.w d3,d2
  5496.  
  5497.  move.w d3,d4
  5498.  move.w d3,d5
  5499.  subq #1,d5
  5500.  move.w d6,d1
  5501.  addq #1,d1
  5502.  
  5503. .pixlopleft:
  5504.  move.w d0,(a3)+
  5505.  sub.w d2,d4
  5506.  bge.s .nobigstepl
  5507.  sub.w d1,d0
  5508.  add.w d3,d4
  5509.  dbra d5,.pixlopleft
  5510.  bra.b lineflat
  5511.  
  5512. .nobigstepl
  5513.  sub.w d6,d0
  5514.  dbra d5,.pixlopleft
  5515.  
  5516. lineflat:
  5517.  
  5518. bothbehind:
  5519.  dbra d7,sideloop
  5520.  bra pastsides
  5521.  
  5522. fbr: dc.w 0
  5523. sbr: dc.w 0
  5524.  
  5525. goursides:
  5526.  
  5527.  move.w #80,top
  5528.  move.w #-1,bottom
  5529.  move.w #0,drawit
  5530.  move.l #Rotated,a1
  5531.  move.l #OnScreen,a2
  5532.  move.w (a0)+,d7    ; no of sides
  5533. sideloopGOUR:
  5534.  move.w minz,d6
  5535.  move.w (a0)+,d1
  5536.  move.w (a0),d3
  5537.  
  5538.  move.l PointBrightsPtr,a4
  5539.  move.w (a4,d1.w*4),fbr
  5540.  move.w (a4,d3.w*4),sbr
  5541.  
  5542.  move.w 6(a1,d1*8),d4    ;first z
  5543.  cmp.w d6,d4
  5544.  bgt.b firstinfrontGOUR
  5545.  move.w 6(a1,d3*8),d5    ; sec z
  5546.  cmp.w d6,d5
  5547.  ble bothbehindGOUR
  5548. ** line must be on left and partially behind.
  5549.  sub.w d5,d4
  5550.  
  5551.  move.w fbr,d0
  5552.  sub.w sbr,d0
  5553.  sub.w d5,d6
  5554.  muls d6,d0
  5555.  divs d4,d0
  5556.  add.w sbr,d0
  5557.  move.w d0,fbr
  5558.  
  5559.  move.l (a1,d1*8),d0
  5560.  sub.l (a1,d3*8),d0
  5561.  asr.l #7,d0
  5562.  muls d6,d0    ; new x coord
  5563.  divs d4,d0
  5564.  ext.l d0
  5565.  asl.l #7,d0
  5566.  
  5567.  add.l (a1,d3*8),d0
  5568.  move.w minz,d4
  5569.  move.w (a2,d3*2),d2
  5570.  divs d4,d0
  5571.  add.w #47,d0
  5572.  move.l ypos,d3
  5573.  divs d5,d3
  5574.  
  5575.  move.w bottomline,d1 
  5576.  bra.b lineclippedGOUR
  5577.  
  5578. firstinfrontGOUR:
  5579.  move.w 6(a1,d3*8),d5    ; sec z
  5580.  cmp.w d6,d5
  5581.  bgt.b bothinfrontGOUR
  5582. ** line must be on right and partially behind.
  5583.  sub.w d4,d5    ; dz
  5584.  
  5585.  move.w sbr,d2
  5586.  sub.w fbr,d2
  5587.  sub.w d4,d6
  5588.  muls d6,d2
  5589.  divs d5,d2
  5590.  add.w fbr,d2
  5591.  move.w d2,sbr
  5592.  
  5593.  move.l (a1,d3*8),d2
  5594.  sub.l (a1,d1*8),d2    ; dx
  5595.  asr.l #7,d2
  5596.  muls d6,d2    ; new x coord
  5597.  divs d5,d2
  5598.  ext.l d2
  5599.  asl.l #7,d2
  5600.  add.l (a1,d1*8),d2
  5601.  move.w minz,d5
  5602.  move.w (a2,d1*2),d0
  5603.  divs d5,d2
  5604.  add.w #47,d2
  5605.  move.l ypos,d1
  5606.  divs d4,d1
  5607.  move.w bottomline,d3 
  5608.  bra.b lineclippedGOUR
  5609.  
  5610. bothinfrontGOUR:
  5611.  
  5612. * Also, usefully enough, both are on-screen
  5613. * so no bottom clipping is needed.
  5614.  
  5615.  move.w (a2,d1*2),d0    ; first x
  5616.  move.w (a2,d3*2),d2    ; second x
  5617.  move.l ypos,d1
  5618.  move.l d1,d3
  5619.  divs d4,d1        ; first y
  5620.  divs d5,d3        ; second y
  5621. lineclippedGOUR:
  5622.  move.l #rightsidetab,a3
  5623.  cmp.w d1,d3
  5624.  bne.b linenotflatGOUR
  5625.  
  5626. ; move.w fbr,d4
  5627. ; move.w sbr,d5
  5628. ; cmp.w d0,d2
  5629. ; bgt.s .nsw
  5630. ; exg d4,d5
  5631. ;.nsw:
  5632.  
  5633. ; move.l #leftbrighttab,a3
  5634. ; move.w d4,(a3,d3.w)
  5635. ; move.l #rightbrighttab,a3
  5636. ; move.w d5,(a3,d3.w) 
  5637.  bra lineflatGOUR
  5638.  
  5639. linenotflatGOUR
  5640.  st drawit
  5641.  bgt lineonrightGOUR
  5642.  move.l #leftsidetab,a3
  5643.  exg d1,d3
  5644.  exg d0,d2
  5645.  
  5646.  lea (a3,d1*2),a3
  5647.  lea leftbrighttab-leftsidetab(a3),a4
  5648.  
  5649.  cmp.w top(pc),d1
  5650.  bge.s .nonewtop
  5651.  move.w d1,top
  5652. .nonewtop:
  5653.  cmp.w bottom(pc),d3
  5654.  ble.s .nonewbot
  5655.  move.w d3,bottom
  5656. .nonewbot:
  5657.  
  5658.  sub.w d1,d3    ; dy
  5659.  sub.w d0,d2    ; dx
  5660.  
  5661.  blt.b .linegoingleft
  5662.  subq.w #1,d0
  5663.  
  5664.  ext.l d2
  5665.  divs d3,d2
  5666.  move.w d2,d6
  5667.  swap d2
  5668.  move.w d2,a5
  5669.  
  5670. ; moveq #0,d6
  5671. ; sub.w d3,d2
  5672. ; blt.s .noco
  5673. ;.makeco
  5674. ; addq #1,d6
  5675. ; sub.w d3,d2
  5676. ; bge.s .makeco
  5677. ;.noco
  5678. ; add.w d3,d2
  5679.  
  5680.  move.w d3,d4
  5681.  move.w d3,d5
  5682.  subq #1,d5
  5683.  move.w d6,d1
  5684.  addq #1,d1
  5685.  move.w d1,a6
  5686.  
  5687.  moveq #0,d1
  5688.  move.w sbr,d1
  5689.  move.w fbr,d2
  5690.  sub.w d1,d2
  5691.  ext.l d2
  5692.  asl.w #8,d2
  5693.  asl.w #3,d2
  5694.  divs d3,d2 
  5695.  ext.l d2
  5696.  asl.l #5,d2
  5697.  swap d1
  5698.  
  5699. .pixlopright:
  5700.  move.w d0,(a3)+
  5701.  swap d1
  5702.  move.w d1,(a4)+
  5703.  swap d1
  5704.  add.l d2,d1
  5705.  
  5706.  sub.w a5,d4
  5707.  bge.s .nobigstep
  5708.  add.w a6,d0
  5709.  add.w d3,d4
  5710.  dbra d5,.pixlopright
  5711.  bra lineflatGOUR
  5712. .nobigstep
  5713.  
  5714.  add.w d6,d0
  5715.  dbra d5,.pixlopright
  5716.  bra lineflatGOUR
  5717.  
  5718. .linegoingleft:
  5719.  
  5720.  subq.w #1,d0
  5721.  
  5722.  neg.w d2
  5723.  
  5724.  ext.l d2
  5725.  divs d3,d2
  5726.  move.w d2,d6
  5727.  swap d2
  5728.  
  5729.  
  5730. ; moveq #0,d6
  5731. ; sub.w d3,d2
  5732. ; blt.s .nocol
  5733. ;.makecol
  5734. ; addq #1,d6
  5735. ; sub.w d3,d2
  5736. ; bge.s .makecol
  5737. ;.nocol
  5738. ; add.w d3,d2
  5739.  
  5740.  move.w d3,d4
  5741.  move.w d3,d5
  5742.  subq #1,d5
  5743.  
  5744.  move.w d6,d1
  5745.  addq #1,d1
  5746.  move.w d1,a6
  5747.  move.w d2,a5
  5748.  
  5749.  moveq #0,d1
  5750.  move.w sbr,d1
  5751.  move.w fbr,d2
  5752.  sub.w d1,d2
  5753.  ext.l d2
  5754.  asl.w #8,d2
  5755.  asl.w #3,d2
  5756.  divs d3,d2 
  5757.  ext.l d2
  5758.  asl.l #5,d2
  5759.  swap d1
  5760.  
  5761. .pixlopleft:
  5762.  
  5763.  swap d1
  5764.  move.w d1,(a4)+
  5765.  swap d1
  5766.  add.l d2,d1
  5767.  
  5768.  sub.w a5,d4
  5769.  bge.s .nobigstepl
  5770.  sub.w a6,d0
  5771.  add.w d3,d4
  5772.  move.w d0,(a3)+
  5773.  dbra d5,.pixlopleft
  5774.  bra lineflatGOUR
  5775.  
  5776. .nobigstepl
  5777.  sub.w d6,d0
  5778.  move.w d0,(a3)+
  5779.  dbra d5,.pixlopleft
  5780.  bra lineflatGOUR
  5781.  
  5782. lineonrightGOUR:
  5783.  
  5784.  lea (a3,d1*2),a3
  5785.  
  5786.  lea rightbrighttab-rightsidetab(a3),a4
  5787.  
  5788.  cmp.w top(pc),d1
  5789.  bge.s .nonewtop
  5790.  move.w d1,top
  5791. .nonewtop:
  5792.  cmp.w bottom(pc),d3
  5793.  ble.s .nonewbot
  5794.  move.w d3,bottom
  5795. .nonewbot:
  5796.  
  5797.  sub.w d1,d3    ; dy
  5798.  sub.w d0,d2    ; dx
  5799.  blt.b .linegoingleft
  5800. ; addq #1,d0
  5801.  ext.l d2
  5802.  divs d3,d2
  5803.  move.w d2,d6
  5804.  swap d2
  5805.  
  5806. ; moveq #0,d6
  5807. ; sub.w d3,d2
  5808. ; blt.s .noco
  5809. ;.makeco
  5810. ; addq #1,d6
  5811. ; sub.w d3,d2
  5812. ; bge.s .makeco
  5813. ;.noco
  5814. ; add.w d3,d2
  5815.  
  5816.  move.w d3,d4
  5817.  move.w d3,d5
  5818.  subq #1,d5
  5819.  move.w d6,d1
  5820.  addq #1,d1
  5821.  
  5822.  move.w d1,a6
  5823.  move.w d2,a5
  5824.  
  5825.  moveq #0,d1
  5826.  move.w fbr,d1
  5827.  move.w sbr,d2
  5828.  sub.w d1,d2
  5829.  ext.l d2
  5830.  asl.w #8,d2
  5831.  asl.w #3,d2
  5832.  divs d3,d2 
  5833.  ext.l d2
  5834.  asl.l #5,d2
  5835.  swap d1
  5836.  
  5837. .pixlopright:
  5838.  
  5839.  swap d1
  5840.  move.w d1,(a4)+
  5841.  swap d1
  5842.  add.l d2,d1
  5843.  
  5844.  sub.w a5,d4
  5845.  bge.s .nobigstep
  5846.  add.w a6,d0
  5847.  add.w d3,d4
  5848.  move.w d0,(a3)+
  5849.  dbra d5,.pixlopright
  5850.  bra.b lineflatGOUR
  5851.  
  5852. .nobigstep
  5853.  add.w d6,d0
  5854.  move.w d0,(a3)+
  5855.  dbra d5,.pixlopright
  5856.  bra.b lineflatGOUR
  5857.  
  5858. .linegoingleft:
  5859. ; addq #1,d0
  5860.  neg.w d2
  5861.  
  5862.  ext.l d2
  5863.  divs d3,d2
  5864.  move.w d2,d6
  5865.  swap d2
  5866.  
  5867.  
  5868. ; moveq #0,d6
  5869. ; sub.w d3,d2
  5870. ; blt.s .nocol
  5871. ;.makecol
  5872. ; addq #1,d6
  5873. ; sub.w d3,d2
  5874. ; bge.s .makecol
  5875. ;.nocol
  5876. ; add.w d3,d2
  5877.  
  5878.  move.w d3,d4
  5879.  move.w d3,d5
  5880.  subq #1,d5
  5881.  move.w d6,d1
  5882.  addq #1,d1
  5883.  move.w d1,a6
  5884.  move.w d2,a5
  5885.  
  5886.  moveq #0,d1
  5887.  move.w fbr,d1
  5888.  move.w sbr,d2
  5889.  sub.w d1,d2
  5890.  ext.l d2
  5891.  asl.w #8,d2
  5892.  asl.w #3,d2
  5893.  divs d3,d2 
  5894.  ext.l d2
  5895.  asl.l #5,d2
  5896.  swap d1
  5897.  
  5898. .pixlopleft:
  5899.  
  5900.  swap d1
  5901.  move.w d1,(a4)+
  5902.  swap d1
  5903.  add.l d2,d1
  5904.  
  5905.  move.w d0,(a3)+
  5906.  sub.w a5,d4
  5907.  bge.s .nobigstepl
  5908.  sub.w a6,d0
  5909.  add.w d3,d4
  5910.  dbra d5,.pixlopleft
  5911.  bra.b lineflatGOUR
  5912.  
  5913. .nobigstepl
  5914.  sub.w d6,d0
  5915.  dbra d5,.pixlopleft
  5916.  
  5917. lineflatGOUR:
  5918.  
  5919. bothbehindGOUR:
  5920.  dbra d7,sideloopGOUR
  5921.  
  5922. pastsides:
  5923.  
  5924.  
  5925.  addq #2,a0
  5926.  
  5927.  move.w #104*4,linedir
  5928.  move.l frompt,a6
  5929.  lea 104*4*41(a6),a6
  5930.  move.w (a0)+,scaleval
  5931.  move.w (a0)+,whichtile
  5932.  move.w (a0)+,d6
  5933.  add.w ZoneBright,d6
  5934.  move.w d6,lighttype
  5935.  move.w above(pc),d6
  5936.  beq.b groundfloor
  5937. * on ceiling:
  5938.  move.w #-104*4,linedir
  5939.  suba.w #104*4,a6
  5940. groundfloor:
  5941.  
  5942.  move.w xoff,d6
  5943.  move.w zoff,d7
  5944.  add.w xwobxoff,d7
  5945.  add.w xwobzoff,d6
  5946.  swap d6
  5947.  swap d7
  5948.  clr.w d6
  5949.  clr.w d7
  5950.  move.w scaleval(pc),d3
  5951.  beq.s .samescale
  5952.  bgt.s .scaledown
  5953.  neg.w d3
  5954.  asr.l d3,d7
  5955.  asr.l d3,d6
  5956.  bra.s .samescale
  5957. .scaledown:
  5958.  asl.l d3,d6
  5959.  asl.l d3,d7
  5960. .samescale
  5961.  move.l d6,sxoff
  5962.  move.l d7,szoff
  5963.  bra pastscale 
  5964.  
  5965.  asr.l #3,d1
  5966.  asr.l #3,d2
  5967.  asr.l #2,d1
  5968.  asr.l #2,d2
  5969.  asr.l #1,d1
  5970.  asr.l #1,d2
  5971. scaleprogfrom
  5972.  nop
  5973.  nop
  5974.  asl.l #1,d1
  5975.  asl.l #1,d2
  5976.  asl.l #2,d1
  5977.  asl.l #2,d2
  5978.  asl.l #3,d1
  5979.  asl.l #3,d2
  5980.  
  5981. top: dc.w 0
  5982. bottom: dc.w 0
  5983. ypos: dc.l 0
  5984. nfloors: dc.w 0
  5985. lighttype: dc.w 0
  5986. above: dc.w 0 
  5987. linedir: dc.w 0
  5988. distaddr: dc.w 0
  5989.  
  5990. minz: dc.w 0
  5991. leftsidetab:
  5992.  ds.w 180
  5993. rightsidetab:
  5994.  ds.w 180
  5995. leftbrighttab:
  5996.  ds.w 180
  5997. rightbrighttab:
  5998.  ds.w 180
  5999.  
  6000. PointBrights:
  6001.  dc.l 0
  6002. CurrentPointBrights:
  6003.  ds.l 1000
  6004.  
  6005. movespd: dc.w 0
  6006. largespd: dc.l 0
  6007. disttobot: dc.w 0
  6008.  
  6009. pastscale:
  6010.  
  6011.  tst.b drawit(pc)
  6012.  beq dontdrawfloor
  6013.  
  6014.  move.l a0,-(a7)
  6015.  
  6016.  move.l #leftsidetab,a4
  6017.  move.w top(pc),d1
  6018.  
  6019.  move.w #39,d7
  6020.  sub.w d1,d7
  6021.  move.w d7,disttobot
  6022.  
  6023.  move.w bottom(pc),d7
  6024.  tst.w above
  6025.  beq.s clipfloor
  6026.  
  6027.  move.w #40,d3
  6028.  move.w d3,d4
  6029.  sub.w topclip,d3
  6030.  sub.w botclip,d4
  6031.  cmp.w d3,d1
  6032.  bge predontdrawfloor
  6033.  cmp.w d4,d7
  6034.  blt predontdrawfloor
  6035.  cmp.w d4,d1
  6036.  bge.s .nocliptoproof
  6037.  move.w d4,d1
  6038. .nocliptoproof
  6039.  cmp.w d3,d7
  6040.  blt.b doneclip
  6041.  move.w d3,d7
  6042.  bra.b doneclip
  6043.  
  6044. clipfloor:
  6045.  move.w botclip,d4
  6046.  sub.w #40,d4
  6047.  cmp.w d4,d1
  6048.  bge predontdrawfloor
  6049.  move.w topclip,d3
  6050.  sub.w #40,d3
  6051.  cmp.w d3,d1
  6052.  bge.s .nocliptopfloor
  6053.  move.w d3,d1
  6054. .nocliptopfloor 
  6055.  cmp.w d3,d7
  6056.  ble predontdrawfloor
  6057.  cmp.w d4,d7
  6058.  blt.s .noclipbotfloor
  6059.  move.w d4,d7
  6060. .noclipbotfloor:
  6061.  
  6062. doneclip:
  6063.  
  6064.  lea (a4,d1*2),a4
  6065. ; move.l #dists,a2
  6066.  move.w distaddr,d0
  6067.  muls #64,d0
  6068.  move.l d0,a2
  6069. ; muls #25,d0
  6070. ; adda.w d0,a2
  6071. ; lea (a2,d1*2),a2
  6072.  sub.w d1,d7
  6073.  ble predontdrawfloor 
  6074.  move.w d1,d0
  6075.  bne.s .notzero
  6076.  moveq #1,d0
  6077. .notzero
  6078.  muls linedir,d1
  6079.  add.l d1,a6
  6080.  move.l #floorscalecols,a1
  6081.  move.l LineToUse,a5
  6082.  
  6083.  tst.b gourfloor
  6084.  bne dogourfloor
  6085.  
  6086.  tst.b anyclipping
  6087.  beq.b dofloornoclip
  6088.  
  6089. dofloor:
  6090. ; move.w (a2)+,d0
  6091.  move.w leftclip(pc),d3
  6092.  move.w rightclip(pc),d4
  6093.  move.w rightsidetab-leftsidetab(a4),d2
  6094.  
  6095.  addq #1,d2
  6096.  cmp.w d3,d2
  6097.  ble.s nodrawline
  6098.  cmp.w d4,d2
  6099.  ble.s noclipright
  6100.  move.w d4,d2
  6101. noclipright:
  6102.  move.w (a4),d1
  6103.  cmp.w d4,d1
  6104.  bge.s nodrawline
  6105.  cmp.w d3,d1
  6106.  bge.s noclipleft
  6107.  move.w d3,d1
  6108. noclipleft:
  6109.  cmp.w d1,d2
  6110.  ble.s nodrawline
  6111.  
  6112.  move.w d1,leftedge
  6113.  move.w d2,rightedge
  6114.  
  6115. ; moveq #0,d1
  6116. ; moveq #0,d3
  6117. ; move.w leftbrighttab-leftsidetab(a4),d1
  6118. ; bge.s .okbl
  6119. ; moveq #0,d1
  6120. ;.okbl:
  6121.  
  6122. ; move.w rightbrighttab-leftsidetab(a4),d3
  6123. ; bge.s .okbr
  6124. ; moveq #0,d3
  6125. ;.okbr:
  6126.  
  6127. ; sub.w d1,d3
  6128. ; asl.w #8,d1
  6129. ; move.l d1,leftbright
  6130. ; swap d3
  6131. ; asr.l #5,d3
  6132. ; divs d5,d3
  6133. ; move.w d3,d5
  6134. ; muls.w d6,d5
  6135. ; asr.l #3,d5
  6136. ; clr.b d5
  6137. ; add.w d5,leftbright+2
  6138.  
  6139. ; ext.l d3
  6140. ; asl.l #5,d3
  6141. ; swap d3
  6142. ; asl.w #8,d3
  6143. ; move.l d3,brightspd
  6144.  
  6145.  move.l a6,a3
  6146.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6147.  move.l a2,d7
  6148.  divs d0,d7
  6149.  move.w d7,d0
  6150.  jsr (a5)
  6151.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6152. nodrawline
  6153.  subq.w #1,disttobot
  6154.  adda.w linedir(pc),a6
  6155.  addq #2,a4
  6156.  addq #1,d0
  6157.  subq #1,d7
  6158.  bgt.b dofloor
  6159.  
  6160. predontdrawfloor
  6161.  move.l (a7)+,a0
  6162.  
  6163. dontdrawfloor:
  6164.  
  6165.  rts
  6166.  
  6167. anyclipping: dc.w 0
  6168.  
  6169. dofloornoclip:
  6170. ; move.w (a2)+,d0
  6171.  move.w rightsidetab-leftsidetab(a4),d2
  6172.  addq #1,d2
  6173.  move.w (a4)+,d1
  6174.  move.w d1,leftedge
  6175.  move.w d2,rightedge
  6176.  
  6177. ; sub.w d1,d2
  6178.  
  6179. ; moveq #0,d1
  6180. ; moveq #0,d3
  6181. ; move.w leftbrighttab-leftsidetab(a4),d1
  6182. ; bge.s .okbl
  6183. ; moveq #0,d1
  6184. ;.okbl:
  6185.  
  6186. ; move.w rightbrighttab-leftsidetab(a4),d3
  6187. ; bge.s .okbr
  6188. ; moveq #0,d3
  6189. ;.okbr:
  6190.  
  6191. ; sub.w d1,d3
  6192. ; asl.w #8,d1
  6193. ; move.l d1,leftbright
  6194. ; swap d3
  6195. ; asr.l #5,d3
  6196. ; divs d2,d3
  6197. ; ext.l d3
  6198. ; asl.l #5,d3
  6199. ; swap d3
  6200. ; asl.w #8,d3
  6201. ; move.l d3,brightspd
  6202.  
  6203.  move.l a6,a3
  6204.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6205.  move.l a2,d7
  6206.  divs d0,d7
  6207.  move.w d7,d0
  6208.  jsr (a5)
  6209.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6210.  subq.w #1,disttobot
  6211.  adda.w linedir(pc),a6
  6212.  addq #1,d0
  6213.  subq #1,d7
  6214.  bgt.b dofloornoclip
  6215.  
  6216.  bra.b predontdrawfloor
  6217.  
  6218. dogourfloor:
  6219.  tst.b anyclipping
  6220.  beq dofloornoclipGOUR
  6221.  
  6222. dofloorGOUR:
  6223. ; move.w (a2)+,d0
  6224.  move.w leftclip(pc),d3
  6225.  move.w rightclip(pc),d4
  6226.  move.w rightsidetab-leftsidetab(a4),d2
  6227.  
  6228.  move.w d2,d5
  6229.  sub.w (a4),d5
  6230.  addq #1,d5
  6231.  moveq #0,d6
  6232.  
  6233.  addq #1,d2
  6234.  cmp.w d3,d2
  6235.  ble nodrawlineGOUR
  6236.  cmp.w d4,d2
  6237.  ble.s nocliprightGOUR
  6238.  move.w d4,d2
  6239. nocliprightGOUR:
  6240.  move.w (a4),d1
  6241.  cmp.w d4,d1
  6242.  bge nodrawlineGOUR
  6243.  cmp.w d3,d1
  6244.  bge.s noclipleftGOUR
  6245.  move.w d3,d6
  6246.  subq #1,d6
  6247.  sub.w d1,d6
  6248.  move.w d3,d1
  6249. noclipleftGOUR:
  6250.  cmp.w d1,d2
  6251.  ble nodrawlineGOUR
  6252.  
  6253.  move.w d1,leftedge
  6254.  move.w d2,rightedge
  6255.  
  6256.  move.l a2,d2
  6257.  divs d0,d2
  6258.  move.w d2,dst
  6259.  asr.w #7,d2
  6260. ; addq #5,d2
  6261. ; add.w lighttype,d2
  6262.  
  6263.  moveq #0,d1
  6264.  moveq #0,d3
  6265.  move.w leftbrighttab-leftsidetab(a4),d1
  6266.  add.w d2,d1
  6267.  bge.s .okbl
  6268.  moveq #0,d1
  6269. .okbl:
  6270.  asr.w #1,d1
  6271.  cmp.w #14,d1
  6272.  ble.s .okdl
  6273.  move.w #14,d1
  6274. .okdl:
  6275.  
  6276.  move.w rightbrighttab-leftsidetab(a4),d3
  6277.  add.w d2,d3
  6278.  bge.s .okbr
  6279.  moveq #0,d3
  6280. .okbr:
  6281.  asr.w #1,d3
  6282.  cmp.w #14,d3
  6283.  ble.s .okdr
  6284.  move.w #14,d3
  6285. .okdr:
  6286.  
  6287.  sub.w d1,d3
  6288.  asl.w #8,d1
  6289.  move.l d1,leftbright
  6290.  swap d3
  6291.  tst.l d3
  6292.  bgt.s .OKITSPOSALREADY 
  6293.  neg.l d3
  6294.  asr.l #5,d3
  6295.  divs d5,d3
  6296.  neg.w d3
  6297.  bra.s .OKNOWITSNEG
  6298.  
  6299. .OKITSPOSALREADY
  6300.  asr.l #5,d3
  6301.  divs d5,d3
  6302. .OKNOWITSNEG
  6303.  muls d3,d6
  6304.  add.w #256*8,d6
  6305.  asr.w #3,d6
  6306.  clr.b d6
  6307.  add.w d6,leftbright+2
  6308.  
  6309.  ext.l d3
  6310.  asl.l #5,d3
  6311.  swap d3
  6312.  asl.w #8,d3
  6313.  move.l d3,brightspd
  6314.  
  6315.  move.l a6,a3
  6316.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6317.  move.w dst,d0
  6318.  lea floorscalecols,a1
  6319.  move.l floortile,a0
  6320.  adda.w whichtile,a0
  6321.  jsr pastfloorbright
  6322.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6323. nodrawlineGOUR
  6324.  
  6325.  subq.w #1,disttobot
  6326.  
  6327.  adda.w linedir(pc),a6
  6328.  addq #2,a4
  6329.  addq #1,d0
  6330.  subq #1,d7
  6331.  bgt dofloorGOUR
  6332.  
  6333. predontdrawfloorGOUR
  6334.  move.l (a7)+,a0
  6335.  
  6336. dontdrawfloorGOUR:
  6337.  
  6338.  rts
  6339.  
  6340. dofloornoclipGOUR:
  6341. ; move.w (a2)+,d0
  6342.  move.w rightsidetab-leftsidetab(a4),d2
  6343.  addq #1,d2
  6344.  move.w (a4),d1
  6345.  move.w d1,leftedge
  6346.  move.w d2,rightedge
  6347.  
  6348.  sub.w d1,d2
  6349.  
  6350.  move.l a2,d6
  6351.  divs d0,d6
  6352.  move.w d6,d5
  6353.  asr.w #7,d5
  6354. ; addq #5,d5
  6355. ; add.w lighttype,d5
  6356.  
  6357.  moveq #0,d1
  6358.  moveq #0,d3
  6359.  move.w leftbrighttab-leftsidetab(a4),d1
  6360.  add.w d5,d1
  6361.  bge.s .okbl
  6362.  moveq #0,d1
  6363. .okbl:
  6364.  asr.w #1,d1
  6365.  cmp.w #14,d1
  6366.  ble.s .okdl
  6367.  move.w #14,d1
  6368. .okdl:
  6369.  
  6370.  move.w rightbrighttab-leftsidetab(a4),d3
  6371.  add.w d5,d3
  6372.  bge.s .okbr
  6373.  moveq #0,d3
  6374. .okbr:
  6375.  asr.w #1,d3
  6376.  cmp.w #14,d3
  6377.  ble.s .okdr
  6378.  move.w #14,d3
  6379. .okdr:
  6380.  
  6381.  sub.w d1,d3
  6382.  asl.w #8,d1
  6383.  move.l d1,leftbright
  6384.  swap d3
  6385.  asr.l #5,d3
  6386.  divs d2,d3
  6387.  ext.l d3
  6388.  asl.l #5,d3
  6389.  swap d3
  6390.  asl.w #8,d3
  6391.  move.l d3,brightspd
  6392.  
  6393.  
  6394.  move.l a6,a3
  6395.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6396.  move.w d6,d0
  6397.  move.w d0,dst
  6398.  lea floorscalecols,a1
  6399.  move.l floortile,a0
  6400.  adda.w whichtile,a0
  6401.  jsr pastfloorbright
  6402.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6403.  subq.w #1,disttobot
  6404.  adda.w linedir(pc),a6
  6405.  addq #2,a4
  6406.  addq #1,d0
  6407.  subq #1,d7
  6408.  bgt dofloornoclipGOUR
  6409.  
  6410.  bra predontdrawfloorGOUR
  6411.  
  6412.  
  6413.  
  6414. dists:
  6415. ; incbin "floordists"
  6416. drawit: dc.w 0
  6417.  
  6418. LineToUse: dc.l 0
  6419.  
  6420. ***************************
  6421. * Right then, time for the floor
  6422. * routine...
  6423. * For test purposes, give it
  6424. * a3 = point to screen
  6425. * d0= z distance away
  6426. * and sinval+cosval must be set up.
  6427. ***************************
  6428.  
  6429. BLACKFLOOR:
  6430.  moveq #0,d0
  6431.  bra.s DOBLACK
  6432.  
  6433. SimpleFloorLine:
  6434.  
  6435.  CACHE_OFF d2
  6436.  
  6437.  move.l #doacrossline,a1
  6438.  move.w leftedge(pc),d1
  6439.  move.w rightedge(pc),d3
  6440.  sub.w d1,d3
  6441.  lea (a1,d1.w*4),a1
  6442.  move.w (a1,d3.w*4),d4
  6443.  move.w #$4e75,(a1,d3.w*4)
  6444.  
  6445.  tst.b CLRNOFLOOR
  6446.  bne.s BLACKFLOOR
  6447.  
  6448.  move.l #PLAINSCALE,a2
  6449.  
  6450.  move.w d0,d2
  6451.  move.w lighttype,d1
  6452.  asr.w #8,d2
  6453.  addq.w #5,d1
  6454.  add.w d2,d1
  6455.  bge.s .fixedbright
  6456.  moveq #0,d1
  6457. .fixedbright:
  6458.  cmp.w #28,d1
  6459.  ble.s .smallbright
  6460.  move.w #28,d1
  6461. .smallbright:
  6462.  lea (a2,d1.w*2),a2
  6463.  
  6464.  move.w whichtile,d0
  6465.  move.w d0,d1
  6466.  and.w #$3,d1
  6467.  and.w #$300,d0
  6468.  lsl.b #6,d1
  6469.  move.b d1,d0
  6470.  move.w d0,tstwhich
  6471.  move.w (a2,d0.w),d0
  6472.  
  6473. DOBLACK:
  6474.  jsr (a1)
  6475.  move.w d4,(a1,d3.w*4)
  6476.  
  6477.  CACHE_ON d2
  6478.  
  6479.  rts
  6480.  
  6481. tstwhich: dc.w 0
  6482. whichtile: dc.w 0
  6483.   
  6484. PLAINSCALE: incbin "ab3:includes/plainscale"
  6485.   
  6486. storeit: dc.l 0
  6487.  
  6488. doacrossline:
  6489. val SET 0
  6490.  REPT 32
  6491.  move.w d0,val(a3)
  6492. val SET val+4
  6493.  ENDR
  6494. val SET val+4
  6495.  REPT 32
  6496.  move.w d0,val(a3)
  6497. val SET val+4
  6498.  ENDR
  6499. val SET val+4
  6500.  REPT 32
  6501.  move.w d0,val(a3)
  6502. val SET val+4
  6503.  ENDR
  6504.  rts
  6505.  
  6506.  
  6507. leftedge: dc.w 0
  6508. rightedge: dc.w 0
  6509.  
  6510. rndpt: dc.l rndtab
  6511.  
  6512.  
  6513. dst: dc.w 0
  6514.  
  6515. FloorLine:
  6516.  
  6517.  move.l floortile,a0
  6518.  adda.w whichtile,a0
  6519.  move.w lighttype,d1
  6520.  move.w d0,dst
  6521.  move.w d0,d2
  6522. *********************
  6523. * Old version
  6524.  asr.w #8,d2
  6525.  addq.w #5,d1
  6526. *********************
  6527. ; asr.w #3,d2
  6528. ; sub.w #4,d2
  6529. ; cmp.w #6,d2
  6530. ; blt.s flbrbr
  6531. ; move.w #6,d2
  6532. ;flbrbr:
  6533. *********************
  6534.  add.w d2,d1
  6535.  bge.s .fixedbright
  6536.  moveq #0,d1
  6537. .fixedbright:
  6538.  cmp.w #28,d1
  6539.  ble.s .smallbright
  6540.  move.w #28,d1
  6541. .smallbright:
  6542.  lea floorscalecols,a1
  6543.  add.l floorbright(pc,d1.w*4),a1
  6544.  bra pastfloorbright
  6545.  
  6546. ConstCol: dc.w 0
  6547.  
  6548. BumpLine:
  6549.  
  6550.  tst.b smoothbumps
  6551.  beq.s Chunky
  6552.  
  6553.  move.l #SmoothTile,a0
  6554.  lea Smoothscalecols,a1
  6555.  bra.b pastast
  6556.  
  6557. Chunky:
  6558.  
  6559.  moveq #0,d2
  6560.  move.l #Bumptile,a0
  6561.  move.w whichtile,d2
  6562.  adda.w d2,a0
  6563.  ror.l #2,d2
  6564.  lsr.w #6,d2
  6565.  rol.l #2,d2
  6566.  and.w #15,d2
  6567.  move.l #ConstCols,a1
  6568.  move.w (a1,d2.w*2),ConstCol
  6569.  lea Bumpscalecols,a1
  6570.  
  6571. pastast:
  6572.  move.w lighttype,d1
  6573.  
  6574.  move.w d0,dst
  6575.  
  6576.  move.w d0,d2
  6577. *********************
  6578. * Old version
  6579.  asr.w #8,d2
  6580.  addq.w #5,d1
  6581. *********************
  6582. ; asr.w #3,d2
  6583. ; sub.w #4,d2
  6584. ; cmp.w #6,d2
  6585. ; blt.s flbrbr
  6586. ; move.w #6,d2
  6587. ;flbrbr:
  6588. *********************
  6589.  add.w d2,d1
  6590.  bge.s .fixedbright
  6591.  moveq #0,d1
  6592. .fixedbright:
  6593.  cmp.w #28,d1
  6594.  ble.s .smallbright
  6595.  move.w #28,d1
  6596. .smallbright:
  6597.  add.l floorbright(pc,d1.w*4),a1
  6598.  bra pastfloorbright
  6599.  
  6600.  
  6601. floorbright:
  6602.  dc.l 512*0
  6603.  dc.l 512*1
  6604.  dc.l 512*1
  6605.  dc.l 512*2
  6606.  dc.l 512*2
  6607.  
  6608.  dc.l 512*3
  6609.  dc.l 512*3
  6610.  dc.l 512*4
  6611.  dc.l 512*4
  6612.  dc.l 512*5
  6613.  
  6614.  dc.l 512*5
  6615.  dc.l 512*6
  6616.  dc.l 512*6
  6617.  dc.l 512*7
  6618.  dc.l 512*7
  6619.  
  6620.  dc.l 512*8
  6621.  dc.l 512*8
  6622.  dc.l 512*9
  6623.  dc.l 512*9
  6624.  dc.l 512*10
  6625.  
  6626.  dc.l 512*10
  6627.  dc.l 512*11
  6628.  dc.l 512*11
  6629.  dc.l 512*12
  6630.  dc.l 512*12
  6631.  
  6632.  dc.l 512*13
  6633.  dc.l 512*13
  6634.  dc.l 512*14
  6635.  dc.l 512*14
  6636.  
  6637. widthleft: dc.w 0
  6638. scaleval: dc.w 0
  6639. sxoff: dc.l 0
  6640. szoff: dc.l 0
  6641. xoff34: dc.w 0
  6642. zoff34: dc.w 0
  6643. scosval: dc.w 0
  6644. ssinval: dc.w 0
  6645.  
  6646.  
  6647. floorsetbright:
  6648.  move.l #walltiles,a0
  6649.  
  6650. pastfloorbright
  6651.  
  6652.  move.w d0,d1
  6653.  muls cosval,d1    ; change in x across whole width
  6654.  move.w d0,d2
  6655.  muls sinval,d2    ; change in z across whole width
  6656.  neg.l d2
  6657. scaleprog:
  6658.  move.w scaleval(pc),d3
  6659.  beq.s .samescale
  6660.  bgt.s .scaledown
  6661.  neg.w d3
  6662.  asr.l d3,d1
  6663.  asr.l d3,d2
  6664.  bra.s .samescale
  6665. .scaledown:
  6666.  asl.l d3,d1
  6667.  asl.l d3,d2
  6668. .samescale
  6669.  
  6670.  move.l d1,d3 ;    z cos
  6671.  move.l d3,d6
  6672.  move.l d3,d5
  6673.  asr.l #1,d6
  6674.  add.l d6,d3
  6675.  asr.l #1,d3
  6676.  
  6677.  move.l d2,d4    ; z sin
  6678.  move.l d4,d6
  6679.  asr.l #1,d6
  6680.  add.l d4,d6
  6681.  add.l d3,d4
  6682.  neg.l d4    ; start x
  6683.  
  6684.  asr.l #1,d6    ; zsin/2
  6685.  sub.l d6,d5    ; start z
  6686.  
  6687.  add.l sxoff,d4
  6688.  add.l szoff,d5
  6689.  
  6690.  moveq #0,d6
  6691.  move.w leftedge(pc),d6
  6692.  beq.s nomultleft
  6693.  
  6694.  move.l d1,a4
  6695.  move.l d2,a5
  6696.  
  6697.  muls.l d6,d3:d1
  6698.  asr.l #6,d1
  6699.  add.l d1,d4
  6700.  
  6701.  muls.l d6,d3:d2
  6702.  asr.l #6,d2
  6703.  add.l d2,d5
  6704.  move.l a4,d1
  6705.  move.l a5,d2
  6706.  
  6707. nomultleft:
  6708.  
  6709.  move.w d4,startsmoothx
  6710.  move.w d5,startsmoothz
  6711.  
  6712.  swap d4
  6713.  asr.l #8,d5
  6714. ; add.w szoff,d5
  6715. ; add.w sxoff,d4
  6716.  and.w #63,d4
  6717.  and.w #63*256,d5
  6718.  move.b d4,d5
  6719.  
  6720.  asr.l #6,d1
  6721.  asr.l #6,d2
  6722.  move.w d1,a4
  6723.  move.w d2,a5
  6724.  asr.l #8,d2
  6725.  and.w #%0011111100000000,d2
  6726.  swap d1
  6727.  add.w d1,d2
  6728.  move.w #%11111100111111,d1
  6729.  and.w d1,d5
  6730.  swap d5
  6731.  move.w startsmoothz,d5
  6732.  swap d5
  6733.  swap d2
  6734.  move.w a5,d2
  6735.  swap d2
  6736.  
  6737. ***********************************
  6738.  
  6739.  move.w d6,a2
  6740.  move.l d2,d6
  6741.  add.w #256,d6
  6742.  
  6743.  moveq #0,d0
  6744.  
  6745.  tst.w a2
  6746.  beq startatleftedge
  6747.  
  6748.  move.w widthleft(pc),d4
  6749.  
  6750.  move.w rightedge(pc),d3
  6751.  
  6752.  cmp.w #31,a2
  6753.  bgt.s notinfirststrip
  6754.  lea (a3,a2.w*4),a3
  6755.  cmp.w #32,d3
  6756.  ble.s allinfirststrip
  6757.  move.w #32,d7
  6758.  sub.w d7,d3
  6759.  sub.w a2,d7
  6760.  bra intofirststrip
  6761.  
  6762. allinfirststrip
  6763.  sub.w a2,d3
  6764.  move.w d3,d7
  6765.  move.w #0,d4
  6766.  bra.b allintofirst
  6767.  
  6768. notinfirststrip:
  6769.  sub.w #32,a2
  6770.  sub.w #32,d3
  6771.  adda.w #33*4,a3
  6772.  cmp.w #31,a2
  6773.  bgt.s notstartinsec
  6774.  lea (a3,a2.w*4),a3
  6775.  cmp.w #32,d3
  6776.  ble.s allinsecstrip
  6777.  move.w #32,d7
  6778.  sub.w d7,d3
  6779.  sub.w a2,d7
  6780.  move.w d3,d4
  6781.  bra.b allintofirst
  6782.  
  6783. allinsecstrip
  6784.  sub.w a2,d3
  6785.  move.w d3,d7
  6786.  move.w #0,d4
  6787.  bra.b allintofirst
  6788.  rts
  6789.  
  6790. prot8: dc.w 0
  6791.  
  6792. notstartinsec:
  6793.  sub.w #32,a2
  6794.  sub.w #32,d3
  6795.  adda.w #33*4,a3
  6796.  lea (a3,a2.w*4),a3
  6797.  cmp.w #32,d3
  6798.  ble.s allinthirdstrip
  6799.  move.w #32,d7
  6800.  sub.w d7,d3
  6801.  sub.w a2,d7
  6802.  move.w d3,d4
  6803.  bra.b allintofirst
  6804.  rts
  6805.  
  6806. allinthirdstrip
  6807.  sub.w a2,d3
  6808.  move.w d3,d7
  6809.  move.w #0,d4
  6810.  bra.b allintofirst
  6811.  rts
  6812.  
  6813. startatleftedge:
  6814.  
  6815.  move.w rightedge(pc),d3
  6816.  sub.w a2,d3
  6817.  
  6818.  move.w d3,d7
  6819.  cmp.w #32,d7
  6820.  ble.s .notoowide
  6821.  move.w #32,d7
  6822. .notoowide:
  6823.  sub.w d7,d3
  6824. intofirststrip:
  6825.  
  6826.  move.w d3,d4
  6827. allintofirst:
  6828.  
  6829.  move.w startsmoothx,d3
  6830.  
  6831. tstwat:
  6832.  
  6833.  tst.b gourfloor
  6834.  bne gouraudfloor
  6835.  
  6836.  tst.b usewater
  6837.  bne texturedwater
  6838.  
  6839.  
  6840. ******************************
  6841. * BumpMap the floor/ceiling! *
  6842.  tst.b usebumps
  6843.  bne.s BumpMap
  6844. ******************************
  6845.  
  6846. ordinary:
  6847.  moveq #0,d0
  6848.  
  6849.  dbra d7,acrossscrn
  6850.  rts
  6851.  
  6852. usebumps: dc.w $0
  6853. smoothbumps: dc.w $0
  6854. gourfloor: dc.w 0
  6855.  
  6856.  include "ab3:source/bumpmap.s"
  6857.  
  6858.  CNOP 0,4
  6859. backbefore:
  6860.  and.w d1,d5
  6861.  move.b (a0,d5.w*4),d0
  6862.  add.w a4,d3
  6863.  move.w (a1,d0.w*2),(a3)
  6864.  addq #4,a3
  6865.  addx.l d6,d5
  6866.  dbcs d7,acrossscrn
  6867.  dbcc d7,backbefore
  6868.  bra.s past1
  6869.  
  6870. acrossscrn:
  6871.  and.w d1,d5
  6872.  move.b (a0,d5.w*4),d0
  6873.  add.w a4,d3
  6874.  move.w (a1,d0.w*2),(a3)
  6875.  addq #4,a3
  6876.  addx.l d2,d5
  6877.  dbcs d7,acrossscrn
  6878.  dbcc d7,backbefore
  6879. past1:
  6880.  bcc.s gotoacross
  6881.  
  6882.  move.w d4,d7
  6883.  bne.s .notdoneyet
  6884.  rts
  6885. .notdoneyet:
  6886.  
  6887.  cmp.w #32,d7
  6888.  ble.s .notoowide
  6889.  move.w #32,d7
  6890. .notoowide
  6891.  sub.w d7,d4  
  6892.  addq #4,a3
  6893.  
  6894.  dbra d7,backbefore
  6895.  rts
  6896.  
  6897.  
  6898. gotoacross:
  6899.  
  6900.  move.w d4,d7
  6901.  bne.s .notdoneyet
  6902.  rts
  6903. .notdoneyet:
  6904.  
  6905.  cmp.w #32,d7
  6906.  ble.s .notoowide
  6907.  move.w #32,d7
  6908. .notoowide
  6909.  sub.w d7,d4  
  6910.  addq #4,a3
  6911.  
  6912.  dbra d7,acrossscrn
  6913.  rts
  6914.  
  6915. leftbright: dc.l 0
  6916. brightspd: dc.l 0
  6917.  
  6918. gouraudfloor:
  6919.  move.l leftbright,d0
  6920.  move.l brightspd,d1
  6921.  dbra d7,acrossscrngour
  6922.  rts
  6923.  
  6924.  CNOP 0,4
  6925. backbeforegour:
  6926.  and.w #63*256+63,d5
  6927.  move.b (a0,d5.w*4),d0
  6928.  add.l d1,d0
  6929.  bcc.s .nomoreb
  6930.  add.w #256,d0
  6931. .nomoreb:
  6932.  add.w a4,d3
  6933.  move.w (a1,d0.w*2),(a3)
  6934.  addq #4,a3 
  6935.  addx.l d6,d5
  6936.  dbcs d7,acrossscrngour
  6937.  dbcc d7,backbeforegour
  6938.  bra.s past1gour
  6939.  
  6940. acrossscrngour:
  6941.  and.w #63*256+63,d5
  6942.  move.b (a0,d5.w*4),d0
  6943.  add.l d1,d0
  6944.  bcc.s .nomoreb
  6945.  add.w #256,d0
  6946. .nomoreb:
  6947.  add.w a4,d3
  6948.  move.w (a1,d0.w*2),(a3)
  6949.  addq #4,a3
  6950.  addx.l d2,d5
  6951.  dbcs d7,acrossscrngour
  6952.  dbcc d7,backbeforegour
  6953. past1gour:
  6954.  bcc.s gotoacrossgour
  6955.  
  6956.  move.w d4,d7
  6957.  bne.s .notdoneyet
  6958.  move.l d0,leftbright
  6959.  
  6960.  rts
  6961. .notdoneyet:
  6962.  
  6963.  cmp.w #32,d7
  6964.  ble.s .notoowide
  6965.  move.w #32,d7
  6966. .notoowide
  6967.  sub.w d7,d4  
  6968.  addq #4,a3
  6969.  
  6970.  dbra d7,backbeforegour
  6971.  rts
  6972.  
  6973.  
  6974. gotoacrossgour:
  6975.  
  6976.  move.w d4,d7
  6977.  bne.s .notdoneyet
  6978.  rts
  6979. .notdoneyet:
  6980.  
  6981.  cmp.w #32,d7
  6982.  ble.s .notoowide
  6983.  move.w #32,d7
  6984. .notoowide
  6985.  sub.w d7,d4  
  6986.  addq #4,a3
  6987.  
  6988.  dbra d7,acrossscrngour
  6989.  rts
  6990.  
  6991.  
  6992. waterpt: dc.l waterlist
  6993.  
  6994. waterlist:
  6995.  dc.l waterfile
  6996.  dc.l waterfile+2
  6997.  dc.l waterfile+256
  6998.  dc.l waterfile+256+2
  6999.  dc.l waterfile+512
  7000.  dc.l waterfile+512+2
  7001.  dc.l waterfile+768
  7002.  dc.l waterfile+768+2
  7003. ; dc.l waterfile+768
  7004. ; dc.l waterfile+512+2
  7005. ; dc.l waterfile+512
  7006. ; dc.l waterfile+256+2
  7007. ; dc.l waterfile+256
  7008. ; dc.l waterfile+2
  7009. endwaterlist:
  7010.  
  7011. watertouse: dc.l waterfile
  7012.  
  7013. wtan: dc.w 0
  7014. wateroff: dc.w 0
  7015.  
  7016. texturedwater:
  7017.  
  7018.  add.w wateroff,d5
  7019.  
  7020.  move.l #brightentab,a1
  7021.  move.w dst,d0
  7022.  clr.b d0
  7023.  
  7024.  add.w d0,d0
  7025.  cmp.w #12*512,d0
  7026.  blt.s .notoowater
  7027.  move.w #12*512,d0
  7028.  
  7029.  
  7030. .notoowater:
  7031.   
  7032.  adda.w d0,a1
  7033.  
  7034.  move.w dst,d0
  7035.  asl.w #7,d0
  7036.  add.w wtan,d0
  7037.  and.w #8191,d0
  7038.  move.l #SineTable,a0
  7039.  move.w (a0,d0.w),d0
  7040.  ext.l d0
  7041.  
  7042.  move.w dst,d3
  7043.  add.w #300,d3
  7044.  divs d3,d0
  7045.  asr.w #6,d0
  7046.  addq #2,d0
  7047.  cmp.w disttobot,d0
  7048.  blt.s oknotoffbototot
  7049.  
  7050.  move.w disttobot,d0
  7051.  subq #1,d0
  7052.  
  7053. oknotoffbototot
  7054.  
  7055. ; move.w dst,d3
  7056. ; asr.w #7,d3
  7057. ; add.w d3,d0
  7058.  
  7059.  muls #104*4,d0
  7060.  tst.w above
  7061.  beq.s nonnnnneg
  7062.  neg.l d0
  7063.  
  7064. nonnnnneg:
  7065.  
  7066.  move.l d0,a6
  7067.  
  7068.  move.l watertouse,a0
  7069.  
  7070.  move.w startsmoothx,d3
  7071.  dbra d7,acrossscrnw
  7072.  rts
  7073.  
  7074. backbeforew:
  7075.  and.w d1,d5
  7076.  move.w (a0,d5.w*4),d0
  7077.  move.b 1(a3,a6.w),d0
  7078.  move.w (a1,d0.w*2),(a3)
  7079.  addq #4,a3
  7080.  add.w a4,d3
  7081.  addx.l d6,d5
  7082.  dbcs d7,acrossscrnw
  7083.  dbcc d7,backbeforew
  7084.  bcc.s past1w
  7085.  add.w #256,d5 
  7086.  bra.s past1w
  7087.  
  7088. acrossscrnw:
  7089.  and.w d1,d5
  7090.  move.w (a0,d5.w*4),d0
  7091.  move.b 1(a3,a6.w),d0
  7092.  move.w (a1,d0.w*2),(a3)
  7093.  addq #4,a3
  7094.  add.w a4,d3
  7095.  addx.l d2,d5
  7096.  dbcs d7,acrossscrnw
  7097.  dbcc d7,backbeforew
  7098.  bcc.s past1w
  7099.  add.w #256,d5 
  7100. past1w:
  7101.  
  7102.  move.w d4,d7
  7103.  bne.s .notdoneyet
  7104.  rts
  7105. .notdoneyet:
  7106.  
  7107.  cmp.w #32,d7
  7108.  ble.s .notoowide
  7109.  move.w #32,d7
  7110. .notoowide
  7111.  sub.w d7,d4  
  7112.  addq #4,a3
  7113.  
  7114.  dbra d7,acrossscrnw
  7115.  rts
  7116.  
  7117. usewater: dc.w 0
  7118.  dc.w 0
  7119. startsmoothx: dc.w 0
  7120.  dc.w 0
  7121. startsmoothz: dc.w 0
  7122.  
  7123. ********************************
  7124. *
  7125.  include "AB3:source/ObjDraw3.chipram"
  7126. *
  7127. ********************************
  7128.  
  7129. numframes:
  7130.  dc.w 0
  7131.  
  7132. alframe: dc.l 0
  7133.  
  7134. alan:
  7135.  dcb.l 8,0
  7136.  dcb.l 8,1
  7137.  dcb.l 8,2
  7138.  dcb.l 8,3
  7139. endalan:
  7140.  
  7141. alanptr: dc.l alan
  7142.  
  7143. Time2: dc.l 0
  7144. dispco:
  7145.  dc.w 0
  7146.  
  7147.  
  7148. key_interrupt:
  7149.         movem.l    d0-d7/a0-a6,-(sp)
  7150.  
  7151. ;        move.w    INTREQR,d0
  7152. ;        btst    #3,d0
  7153. ;        beq    .not_key
  7154.  
  7155.         move.b    $bfdd00,d0
  7156.         btst    #0,d0
  7157.         bne.b    .key_cont
  7158. ;        move.b    $bfed01,d0
  7159. ;        btst    #0,d0
  7160. ;        bne    .key_cont
  7161.     
  7162. ;        btst    #3,d0
  7163. ;        beq    .key_cont
  7164.  
  7165.         move.b    $bfec01,d0
  7166.         clr.b    $bfec01
  7167.  
  7168.         tst.b    d0
  7169.         beq.b    .key_cont
  7170.  
  7171. ;        bset    #6,$bfee01
  7172. ;        move.b    #$f0,$bfe401
  7173. ;        move.b    #$00,$bfe501
  7174. ;        bset    #0,$bfee01
  7175.  
  7176.  
  7177.         not.b    d0
  7178.         ror.b    #1,d0
  7179.         lea.l    KeyMap,a0
  7180.         tst.b    d0
  7181.         bmi.b    .key_up
  7182.         and.w    #$7f,d0
  7183. ;        add.w    #1,d0
  7184.         move.b    #$ff,(a0,d0.w)
  7185.         move.b    d0,lastpressed
  7186.  
  7187.         bra.b    .key_cont2
  7188. .key_up:
  7189.         and.w    #$7f,d0
  7190. ;        add.w    #1,d0
  7191.         move.b    #$00,(a0,d0.w)
  7192.  
  7193. .key_cont2
  7194. ;        btst    #0,$bfed01
  7195. ;        beq    .key_cont2
  7196. ;        move.b    #%00000000,$bfee01
  7197. ;        move.b    #%10001000,$bfed01
  7198.  
  7199. ;alt keys should not be independent so overlay ralt on lalt
  7200.  
  7201.         
  7202. .key_cont
  7203.  
  7204. ;        move.w    #$0008,INTREQ
  7205. .not_key:    ;lea.l    $dff000,a5
  7206.  
  7207. ;        lea.l    _keypressed(pc),a0
  7208. ;        move.b    101(a0),d0    ;read LALT
  7209. ;        or.b    102(a0),d0    ;blend it with RALT
  7210. ;        move.b    d0,127(a0)    ;save in combined position
  7211.  
  7212.         movem.l    (sp)+,d0-d7/a0-a6
  7213.  
  7214.         rts
  7215.  
  7216. lastpressed:    dc.b 0
  7217. KInt_CCode    Ds.b    1
  7218. KInt_Askey    Ds.b    1
  7219. KInt_OCode    Ds.w    1
  7220.  
  7221.  
  7222. OldSpace: dc.b 0
  7223. SpaceTapped: dc.b 0
  7224. PLR1_SPCTAP: dc.b 0
  7225. PLR2_SPCTAP: dc.b 0
  7226. PLR1_Ducked: dc.b 0
  7227. PLR2_Ducked: dc.b 0
  7228.  even
  7229.  
  7230.  include "ab3:source/PLR1CONTROL.s"
  7231.  include "ab3:source/PLR2CONTROL.s"
  7232.  include "ab3:source/FALL.s"
  7233.  
  7234. prot7: dc.w 0
  7235.  
  7236. GOTTOSEND: dc.w 0
  7237.  
  7238. OtherInter:
  7239.  move.w #$0010,$dff000+intreq
  7240.  movem.l d0-d7/a0-a6,-(a7)
  7241.  bra.s justshake
  7242.  
  7243.     cnop 0,4
  7244.  
  7245. Chan0inter:
  7246.  
  7247.     SAVEREGS
  7248.     jsr    .routine
  7249.     GETREGS
  7250.     moveq    #0,d0
  7251.     rts
  7252.  
  7253. .routine
  7254.  
  7255.     FILTER
  7256.     
  7257. ;w move.w #$0010,$dff000+intreq
  7258.  
  7259.  tst.b doanything
  7260.  bne.s dosomething
  7261.  
  7262.  moveq #0,d0
  7263.  rts
  7264.  
  7265. dosomething:
  7266.  
  7267.  
  7268.  addq.w #1,FramesToDraw
  7269.  movem.l d0-d7/a0-a6,-(a7)
  7270.  
  7271. ; jsr INITREC
  7272. ; jsr RECEIVE
  7273.  
  7274. ; tst.l BUFFER
  7275. ; beq.s justshake
  7276. ; st GOTTOSEND
  7277. ; move.l #OtherInter,$6c
  7278.  
  7279. justshake:
  7280.  
  7281.  cmp.b #'b',Prefsfile+3
  7282.  bne.s .noback
  7283.  jsr mt_music
  7284. .noback:
  7285.  
  7286.  bra dontshowtime
  7287.  
  7288.  tst.b oktodisplay
  7289.  beq dontshowtime
  7290.  clr.b oktodisplay
  7291.  subq.w #1,dispco
  7292.  bgt dontshowtime
  7293.  move.w #10,dispco
  7294.  
  7295.  move.l #TimerScr+10,a0
  7296.  move.l TimeCount,d0
  7297.  bge.s timenotneg
  7298.  move.l #1111*256,d0
  7299. timenotneg:
  7300.  asr.l #8,d0
  7301.  move.l #digits,a1
  7302.  move.w #7,d2
  7303. digitlop
  7304.  divs #10,d0
  7305.  swap d0
  7306.  lea (a1,d0.w*8),a2
  7307.  move.b (a2)+,(a0)
  7308.  move.b (a2)+,24(a0)
  7309.  move.b (a2)+,24*2(a0)
  7310.  move.b (a2)+,24*3(a0)
  7311.  move.b (a2)+,24*4(a0)
  7312.  move.b (a2)+,24*5(a0)
  7313.  move.b (a2)+,24*6(a0)
  7314.  move.b (a2)+,24*7(a0)
  7315.  subq #1,a0
  7316.  swap d0
  7317.  ext.l d0
  7318.  dbra d2,digitlop
  7319.  
  7320.  move.l #TimerScr+10+24*10,a0
  7321.  move.l NumTimes,d0
  7322.  move.l #digits,a1
  7323.  move.w #3,d2
  7324. digitlop2
  7325.  divs #10,d0
  7326.  swap d0
  7327.  lea (a1,d0.w*8),a2
  7328.  move.b (a2)+,(a0)
  7329.  move.b (a2)+,24(a0)
  7330.  move.b (a2)+,24*2(a0)
  7331.  move.b (a2)+,24*3(a0)
  7332.  move.b (a2)+,24*4(a0)
  7333.  move.b (a2)+,24*5(a0)
  7334.  move.b (a2)+,24*6(a0)
  7335.  move.b (a2)+,24*7(a0)
  7336.  subq #1,a0
  7337.  swap d0
  7338.  ext.l d0
  7339.  dbra d2,digitlop2
  7340.  
  7341.  move.l #TimerScr+10+24*20,a0
  7342.  moveq #0,d0
  7343.  move.w FramesToDraw,d0
  7344.  move.l #digits,a1
  7345.  move.w #2,d2
  7346. digitlop3
  7347.  divs #10,d0
  7348.  swap d0
  7349.  lea (a1,d0.w*8),a2
  7350.  move.b (a2)+,(a0)
  7351.  move.b (a2)+,24(a0)
  7352.  move.b (a2)+,24*2(a0)
  7353.  move.b (a2)+,24*3(a0)
  7354.  move.b (a2)+,24*4(a0)
  7355.  move.b (a2)+,24*5(a0)
  7356.  move.b (a2)+,24*6(a0)
  7357.  move.b (a2)+,24*7(a0)
  7358.  subq #1,a0
  7359.  swap d0
  7360.  ext.l d0
  7361.  dbra d2,digitlop3
  7362.  
  7363. dontshowtime:
  7364.  
  7365.  
  7366.  move.l alanptr,a0
  7367.  move.l (a0)+,alframe
  7368.  cmp.l #endalan,a0
  7369.  blt.s nostartalan
  7370.  move.l #alan,a0
  7371. nostartalan:
  7372.  move.l a0,alanptr
  7373.  
  7374.  
  7375.  tst.b READCONTROLS
  7376.  beq.s nocontrols
  7377.  
  7378.  cmp.b #'s',mors
  7379.  beq.s control2
  7380.  
  7381.  tst.b PLR1MOUSE
  7382.  beq.s PLR1_nomouse
  7383.  bsr PLR1_mouse_control
  7384. PLR1_nomouse:
  7385.  tst.b PLR1KEYS
  7386.  beq.s PLR1_nokeys
  7387.  bsr PLR1_keyboard_control
  7388. PLR1_nokeys:
  7389. ; tst.b PLR1PATH
  7390. ; beq.s PLR1_nopath
  7391. ; bsr PLR1_follow_path
  7392. ;PLR1_nopath:
  7393.  tst.b PLR1JOY
  7394.  beq.s PLR1_nojoy
  7395.  bsr PLR1_JoyStick_control
  7396. PLR1_nojoy: 
  7397.  bra.s nocontrols
  7398.  
  7399. control2:
  7400.  tst.b PLR2MOUSE
  7401.  beq.s PLR2_nomouse
  7402.  bsr PLR2_mouse_control
  7403. PLR2_nomouse:
  7404.  tst.b PLR2KEYS
  7405.  beq.s PLR2_nokeys
  7406.  bsr PLR2_keyboard_control
  7407. PLR2_nokeys:
  7408. ; tst.b PLR2PATH
  7409. ; beq.s PLR2_nopath
  7410. ; bsr PLR1_follow_path
  7411. ;PLR2_nopath:
  7412.  tst.b PLR2JOY
  7413.  beq.s PLR2_nojoy
  7414.  bsr PLR2_JoyStick_control
  7415. PLR2_nojoy: 
  7416.  
  7417.  
  7418. nocontrols:
  7419.  
  7420.  move.l #$dff000,a6
  7421.  
  7422.  cmp.b #'4',Prefsfile+1
  7423.  bne.s nomuckabout
  7424.  
  7425.  move.w #$0,d0 
  7426.  tst.b NoiseMade0LEFT
  7427.  beq.s noturnoff0
  7428.  move.w #1,d0
  7429. noturnoff0:
  7430.  tst.b NoiseMade0RIGHT
  7431.  beq.s noturnoff1
  7432.  or.w #2,d0
  7433. noturnoff1:
  7434.  tst.b NoiseMade1RIGHT
  7435.  beq.s noturnoff2
  7436.  or.w #4,d0
  7437. noturnoff2:
  7438.  tst.b NoiseMade1LEFT
  7439.  beq.s noturnoff3
  7440.  or.w #8,d0
  7441. noturnoff3:
  7442.     move.w d0,dmacon(a6)
  7443.  
  7444. nomuckabout:
  7445.  
  7446.  
  7447. ; tst.b PLR2_fire
  7448. ; beq.s firenotpressed2
  7449. ; fire was pressed last time.
  7450. ; btst #7,$bfe001
  7451. ; bne.s firenownotpressed2
  7452. ; fire is still pressed this time.
  7453. ; st PLR2_fire
  7454. ; bra dointer
  7455.  
  7456. firenownotpressed2:
  7457. ; fire has been released.
  7458. ; clr.b PLR2_fire
  7459. ; bra dointer
  7460.  
  7461. firenotpressed2
  7462.  
  7463. ; fire was not pressed last frame...
  7464.  
  7465. ; btst #7,$bfe001
  7466. ; if it has still not been pressed, go back above
  7467. ; bne.s firenownotpressed2
  7468. ; fire was not pressed last time, and was this time, so has
  7469. ; been clicked.
  7470. ; st PLR2_clicked
  7471. ; st PLR2_fire
  7472.  
  7473. dointer
  7474.  
  7475.  cmp.b #'4',Prefsfile+1
  7476.     beq fourchannel
  7477.  
  7478.  btst #1,$dff000+intreqr
  7479.     bne.s newsampbitl
  7480.  
  7481.  movem.l (a7)+,d0-d7/a0-a6
  7482.  
  7483.  moveq #0,d0
  7484.  rts
  7485.  
  7486.  
  7487. swappedem: dc.w 0
  7488.  
  7489. newsampbitl:
  7490.  
  7491.  move.w #$820f,$dff000+dmacon
  7492.  
  7493.  move.w #$200,$dff000+intreq
  7494.  
  7495. ; tst.b CHANNELDATA
  7496. ; bne nochannel0
  7497.  
  7498.  move.l pos0LEFT,a0
  7499.  move.l pos2LEFT,a1
  7500.  
  7501.  move.l #tab,a2
  7502.  
  7503.  moveq #0,d0
  7504.  moveq #0,d1
  7505.  move.b vol0left,d0
  7506.  move.b vol2left,d1
  7507.  cmp.b d1,d0
  7508.  slt swappedem
  7509.  bge.s fbig0
  7510.  
  7511. ; d1 is bigger so scale d0 and use d1
  7512. ; as audiochannel volume.
  7513.  
  7514.  exg a0,a1
  7515.  asl.w #6,d0
  7516.  divs d1,d0
  7517.  lsl.w #8,d0
  7518.  adda.w d0,a2
  7519.  move.w d1,$dff0a8
  7520.  bra.s donechan0
  7521.  
  7522. fbig0:
  7523.  tst.w d0
  7524.  beq.s donechan0
  7525.  asl.w #6,d1
  7526.  divs d0,d1
  7527.  lsl.w #8,d1
  7528.  adda.w d1,a2
  7529.  move.w d0,$dff0a8
  7530.  
  7531. donechan0:
  7532.  
  7533.  move.l Aupt0,a3
  7534.  move.l a3,$dff0a0
  7535.  move.l Auback0,Aupt0
  7536.  move.l a3,Auback0
  7537.  
  7538.  move.l Auback0,a3
  7539.  
  7540.  moveq #0,d0
  7541.  moveq #0,d1
  7542.  moveq #0,d2
  7543.  moveq #0,d3
  7544.  moveq #0,d4
  7545.  moveq #0,d5
  7546.  move.w #49,d7
  7547. loop:
  7548.  move.l (a0)+,d0
  7549.  move.b (a1)+,d1
  7550.  move.b (a1)+,d2
  7551.  move.b (a1)+,d3
  7552.  move.b (a1)+,d4
  7553.  move.b (a2,d3.w),d5
  7554.  swap d5
  7555.  move.b (a2,d1.w),d5
  7556.  asl.l #8,d5
  7557.  move.b (a2,d2.w),d5
  7558.  swap d5
  7559.  move.b (a2,d4.w),d5
  7560.  add.l d5,d0
  7561.  move.l d0,(a3)+
  7562.  dbra d7,loop
  7563.  
  7564.  tst.b swappedem
  7565.  beq.s .ok23
  7566.  exg a0,a1
  7567. .ok23:
  7568.  
  7569.  cmp.l Samp0endLEFT,a0
  7570.  blt.s .notoffendsamp1
  7571.  move.l SampleList+6*8,a0
  7572.  move.l SampleList+6*8+4,Samp0endLEFT
  7573.  move.b #63,vol0left
  7574.  st LEFTCHANDATA+1
  7575.  move.w #0,LEFTCHANDATA+2
  7576. .notoffendsamp1:
  7577.  
  7578.  cmp.l Samp2endLEFT,a1
  7579.  blt.s .notoffendsamp2
  7580.  move.l #empty,a1
  7581.  move.l #emptyend,Samp2endLEFT
  7582.  move.b #0,vol2left
  7583.  st LEFTCHANDATA+1+8
  7584.  move.w #0,LEFTCHANDATA+2+8
  7585. .notoffendsamp2:
  7586.  
  7587.  move.l a0,pos0LEFT
  7588.  move.l a1,pos2LEFT
  7589.  
  7590. nochannel0:
  7591.  
  7592.  tst.b CHANNELDATA+16
  7593.  bne nochannel1
  7594.  
  7595.  
  7596.  move.l pos0RIGHT,a0
  7597.  move.l pos2RIGHT,a1
  7598.  
  7599.  move.l Aupt1,a3
  7600.  move.l a3,$dff0b0
  7601.  move.l Auback1,Aupt1
  7602.  move.l a3,Auback1
  7603.  
  7604.  move.l #tab,a2
  7605.  
  7606.  moveq #0,d0
  7607.  moveq #0,d1
  7608.  move.b vol0right,d0
  7609.  move.b vol2right,d1
  7610.  cmp.b d1,d0
  7611.  slt swappedem
  7612.  bge.s fbig1
  7613.  
  7614. ; d1 is bigger so scale d0 and use d1
  7615. ; as audiochannel volume.
  7616.  
  7617.  exg a0,a1
  7618.  asl.w #6,d0
  7619.  divs d1,d0
  7620.  lsl.w #8,d0
  7621.  adda.w d0,a2
  7622.  move.w d1,$dff0b8
  7623.  bra.s donechan1
  7624.  
  7625. fbig1:
  7626.  tst.w d0
  7627.  beq.s donechan1
  7628.  asl.w #6,d1
  7629.  divs d0,d1
  7630.  lsl.w #8,d1
  7631.  adda.w d1,a2
  7632.  move.w d0,$dff0b8
  7633.  
  7634. donechan1:
  7635.  moveq #0,d0
  7636.  moveq #0,d1
  7637.  moveq #0,d2
  7638.  moveq #0,d3
  7639.  moveq #0,d4
  7640.  moveq #0,d5
  7641.  move.w #49,d7
  7642. loop2:
  7643.  move.l (a0)+,d0
  7644.  move.b (a1)+,d1
  7645.  move.b (a1)+,d2
  7646.  move.b (a1)+,d3
  7647.  move.b (a1)+,d4
  7648.  move.b (a2,d3.w),d5
  7649.  swap d5
  7650.  move.b (a2,d1.w),d5
  7651.  asl.l #8,d5
  7652.  move.b (a2,d2.w),d5
  7653.  swap d5
  7654.  move.b (a2,d4.w),d5
  7655.  add.l d5,d0
  7656.  move.l d0,(a3)+
  7657.  dbra d7,loop2
  7658.  
  7659.  tst.b swappedem
  7660.  beq.s ok01
  7661.  exg a0,a1
  7662. ok01:
  7663.  
  7664.  cmp.l Samp0endRIGHT,a0
  7665.  blt.s .notoffendsamp1
  7666.  move.l #empty,a0
  7667.  move.l #emptyend,Samp0endRIGHT
  7668.  move.b #0,vol0right
  7669.  st RIGHTCHANDATA+1
  7670.  move.w #0,RIGHTCHANDATA+2
  7671. .notoffendsamp1:
  7672.  
  7673.  cmp.l Samp2endRIGHT,a1
  7674.  blt.s .notoffendsamp2
  7675.  move.l #empty,a1
  7676.  move.l #emptyend,Samp2endRIGHT
  7677.  move.b #0,vol2right
  7678.  st RIGHTCHANDATA+1+8
  7679.  move.w #0,RIGHTCHANDATA+2+8
  7680. .notoffendsamp2:
  7681.  
  7682.  move.l a0,pos0RIGHT
  7683.  move.l a1,pos2RIGHT
  7684.  
  7685. nochannel1:
  7686.  
  7687. ******************* Other two channels
  7688.  
  7689.  move.l pos1LEFT,a0
  7690.  move.l pos3LEFT,a1
  7691.  
  7692.  move.l #tab,a2
  7693.  
  7694.  moveq #0,d0
  7695.  moveq #0,d1
  7696.  move.b vol1left,d0
  7697.  move.b vol3left,d1
  7698.  cmp.b d1,d0
  7699.  slt swappedem
  7700.  bge.s fbig2
  7701.  
  7702. ; d1 is bigger so scale d0 and use d1
  7703. ; as audiochannel volume.
  7704.  
  7705.  exg a0,a1
  7706.  asl.w #6,d0
  7707.  divs d1,d0
  7708.  lsl.w #8,d0
  7709.  adda.w d0,a2
  7710.  move.w d1,$dff0d8
  7711.  bra.s donechan2
  7712.  
  7713. fbig2:
  7714.  tst.w d0
  7715.  beq.s donechan2
  7716.  asl.w #6,d1
  7717.  divs d0,d1
  7718.  lsl.w #8,d1
  7719.  adda.w d1,a2
  7720.  move.w d0,$dff0d8
  7721.  
  7722. donechan2:
  7723.  
  7724.  move.l Aupt2,a3
  7725.  move.l a3,$dff0d0
  7726.  move.l Auback2,Aupt2
  7727.  move.l a3,Auback2
  7728.  
  7729.  moveq #0,d0
  7730.  moveq #0,d1
  7731.  moveq #0,d2
  7732.  moveq #0,d3
  7733.  moveq #0,d4
  7734.  moveq #0,d5
  7735.  move.w #49,d7
  7736. loop3:
  7737.  move.l (a0)+,d0
  7738.  move.b (a1)+,d1
  7739.  move.b (a1)+,d2
  7740.  move.b (a1)+,d3
  7741.  move.b (a1)+,d4
  7742.  move.b (a2,d3.w),d5
  7743.  swap d5
  7744.  move.b (a2,d1.w),d5
  7745.  asl.l #8,d5
  7746.  move.b (a2,d2.w),d5
  7747.  swap d5
  7748.  move.b (a2,d4.w),d5
  7749.  add.l d5,d0
  7750.  move.l d0,(a3)+
  7751.  dbra d7,loop3
  7752.  
  7753.  tst.b swappedem
  7754.  beq.s .ok23
  7755.  exg a0,a1
  7756. .ok23:
  7757.  
  7758.  cmp.l Samp1endLEFT,a0
  7759.  blt.s .notoffendsamp3
  7760.  move.l #empty,a0
  7761.  move.l #emptyend,Samp1endLEFT
  7762.  move.b #0,vol1left
  7763.  st LEFTCHANDATA+1+4
  7764.  move.w #0,LEFTCHANDATA+2+4
  7765. .notoffendsamp3:
  7766.  
  7767.  cmp.l Samp3endLEFT,a1
  7768.  blt.s .notoffendsamp4
  7769.  move.l #empty,a1
  7770.  move.l #emptyend,Samp3endLEFT
  7771.  move.b #0,vol3left
  7772.  st LEFTCHANDATA+1+12
  7773.  move.w #0,LEFTCHANDATA+2+12
  7774. .notoffendsamp4:
  7775.  
  7776.  move.l a0,pos1LEFT
  7777.  move.l a1,pos3LEFT
  7778.  
  7779.  move.l pos1RIGHT,a0
  7780.  move.l pos3RIGHT,a1
  7781.  
  7782.  move.l Aupt3,a3
  7783.  move.l a3,$dff0c0
  7784.  move.l Auback3,Aupt3
  7785.  move.l a3,Auback3
  7786.  
  7787.  move.l #tab,a2
  7788.  
  7789.  moveq #0,d0
  7790.  moveq #0,d1
  7791.  move.b vol1right,d0
  7792.  move.b vol3right,d1
  7793.  cmp.b d1,d0
  7794.  slt.s swappedem
  7795.  bge.s fbig3
  7796.  
  7797.  exg a0,a1
  7798.  asl.w #6,d0
  7799.  divs d1,d0
  7800.  lsl.w #8,d0
  7801.  adda.w d0,a2
  7802.  move.w d1,$dff0c8
  7803.  bra.s donechan3
  7804.  
  7805. fbig3:
  7806.  tst.w d0
  7807.  beq.s donechan3
  7808.  asl.w #6,d1
  7809.  divs d0,d1
  7810.  lsl.w #8,d1
  7811.  adda.w d1,a2
  7812.  move.w d0,$dff0c8
  7813. donechan3:
  7814.  
  7815.  moveq #0,d0
  7816.  moveq #0,d1
  7817.  moveq #0,d2
  7818.  moveq #0,d3
  7819.  moveq #0,d4
  7820.  moveq #0,d5
  7821.  move.w #49,d7
  7822. loop4:
  7823.  move.l (a0)+,d0
  7824.  move.b (a1)+,d1
  7825.  move.b (a1)+,d2
  7826.  move.b (a1)+,d3
  7827.  move.b (a1)+,d4
  7828.  move.b (a2,d3.w),d5
  7829.  swap d5
  7830.  move.b (a2,d1.w),d5
  7831.  asl.l #8,d5
  7832.  move.b (a2,d2.w),d5
  7833.  swap d5
  7834.  move.b (a2,d4.w),d5
  7835.  add.l d5,d0
  7836.  move.l d0,(a3)+
  7837.  dbra d7,loop4
  7838.  
  7839.  tst.b swappedem
  7840.  beq.s .ok23
  7841.  exg a0,a1
  7842. .ok23:
  7843.  
  7844.  cmp.l Samp1endRIGHT,a0
  7845.  blt.s notoffendsamp3
  7846.  move.l #empty,a0
  7847.  move.l #emptyend,Samp1endRIGHT
  7848.  move.b #0,vol1right
  7849.  st RIGHTCHANDATA+1+4
  7850.  move.w #0,RIGHTCHANDATA+2+4
  7851. notoffendsamp3:
  7852.  
  7853.  cmp.l Samp3endRIGHT,a1
  7854.  blt.s notoffendsamp4
  7855.  move.l #empty,a1
  7856.  move.l #emptyend,Samp3endRIGHT
  7857.  move.b #0,vol3right
  7858.  st RIGHTCHANDATA+1+12
  7859.  move.w #0,RIGHTCHANDATA+2+12
  7860. notoffendsamp4:
  7861.  
  7862.  move.l a0,pos1RIGHT
  7863.  move.l a1,pos3RIGHT
  7864.  
  7865.  movem.l (a7)+,d0-d7/a0-a6
  7866.  tst.b counting
  7867.  beq.b .nostartcounter
  7868.  JSR STARTCOUNT
  7869. .nostartcounter:
  7870.  
  7871.  moveq #0,d0
  7872.  rts
  7873.  
  7874. ***********************************
  7875. * 4 channel sound routine
  7876. ***********************************
  7877.  
  7878. fourchannel:
  7879.  
  7880.  move.l #$dff000,a6
  7881.  
  7882.  btst #7,intreqrl(a6)
  7883.  beq.s nofinish0
  7884. ; move.w #0,LEFTCHANDATA+2
  7885. ; st LEFTCHANDATA+1
  7886.  move.l #null,$a0(a6)
  7887.  move.w #100,$a4(a6) 
  7888.  move.w #$0080,intreq(a6)
  7889. nofinish0:
  7890.  
  7891.  tst.b NoiseMade0pLEFT
  7892.  beq.s NoChan0sound
  7893.  
  7894.  move.l Samp0endLEFT,d0
  7895.  move.l pos0LEFT,d1
  7896.  sub.l d1,d0
  7897.  lsr.l #1,d0
  7898.  move.w d0,$a4(a6)
  7899.  move.l d1,$a0(a6)
  7900.  move.w #$8201,dmacon(a6)
  7901.  moveq #0,d0
  7902.  move.b vol0left,d0
  7903.  move.w d0,$a8(a6)
  7904.  
  7905. NoChan0sound:
  7906.  
  7907. *****************************************
  7908. *****************************************
  7909.  
  7910.  btst #0,intreqr(a6)
  7911.  beq.s nofinish1
  7912.  move.l #null,$b0(a6)
  7913.  move.w #100,$b4(a6)
  7914.  move.w #$0100,intreq(a6)
  7915. nofinish1:
  7916.  
  7917.  tst.b NoiseMade0pRIGHT
  7918.  beq.s NoChan1sound
  7919.  
  7920.  move.l Samp0endRIGHT,d0
  7921.  move.l pos0RIGHT,d1
  7922.  sub.l d1,d0
  7923.  lsr.l #1,d0
  7924.  move.w d0,$b4(a6)
  7925.  move.l d1,$b0(a6)
  7926.  move.w d0,playnull1
  7927.  move.w #$8202,dmacon(a6)
  7928.  moveq #0,d0
  7929.  move.b vol0right,d0
  7930.  move.w d0,$b8(a6)
  7931.  
  7932. NoChan1sound:
  7933.  
  7934. *****************************************
  7935. *****************************************
  7936.  
  7937.  btst #1,intreqr(a6)
  7938.  beq.s nofinish2
  7939.  move.l #null,$c0(a6)
  7940.  move.w #100,$c4(a6)
  7941.  move.w #$0200,intreq(a6)
  7942. nofinish2:
  7943.  
  7944.  tst.b NoiseMade1pRIGHT
  7945.  beq.s NoChan2sound
  7946.  
  7947.  move.l Samp1endRIGHT,d0
  7948.  move.l pos1RIGHT,d1
  7949.  sub.l d1,d0
  7950.  lsr.l #1,d0
  7951.  move.w d0,$c4(a6)
  7952.  move.w d0,playnull2
  7953.  
  7954.  move.l d1,$c0(a6)
  7955.  move.w #$8204,dmacon(a6)
  7956.  moveq #0,d0
  7957.  move.b vol1right,d0
  7958.  move.w d0,$c8(a6)
  7959.  
  7960. NoChan2sound:
  7961.  
  7962. *****************************************
  7963. *****************************************
  7964.  
  7965.  btst #2,intreqr(a6)
  7966.  beq.s nofinish3
  7967.  move.l #null,$d0(a6)
  7968.  move.w #100,$d4(a6)
  7969.  move.w #$0400,intreq(a6)
  7970. nofinish3:
  7971.  
  7972.  tst.b NoiseMade1pLEFT
  7973.  beq.s NoChan3sound
  7974.  
  7975.  move.l Samp1endLEFT,d0
  7976.  move.l pos1LEFT,d1
  7977.  sub.l d1,d0
  7978.  lsr.l #1,d0
  7979.  move.w d0,$d4(a6)
  7980.  move.w d0,playnull3
  7981.  move.l d1,$d0(a6)
  7982.  move.w #$8208,dmacon(a6)
  7983.  moveq #0,d0
  7984.  move.b vol1left,d0
  7985.  move.w d0,$d8(a6)
  7986.  
  7987. NoChan3sound:
  7988.  
  7989. nomorechannels:
  7990.  
  7991.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7992.  move.l #0,NoiseMade0LEFT
  7993.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7994.  move.l #0,NoiseMade0RIGHT
  7995.  
  7996. ; tst.b playnull0
  7997. ; beq.s .nnul
  7998. ; sub.b #1,playnull0
  7999. ; bra.s chan0still
  8000. ;.nnul:
  8001. ;chan0still:
  8002.  
  8003.  tst.b NoiseMade0pLEFT
  8004.  bne.s chan0still
  8005.  tst.w playnull0
  8006.  beq.s nnul0
  8007.  sub.w #100,playnull0
  8008.  bra.s chan0still
  8009. nnul0:
  8010.  move.w #0,LEFTCHANDATA+2
  8011.  st LEFTCHANDATA+1
  8012. chan0still:
  8013.  
  8014.  tst.b NoiseMade0pRIGHT
  8015.  bne.s chan1still
  8016.  tst.w playnull1
  8017.  beq.s nnul1
  8018.  sub.w #100,playnull1
  8019.  bra.s chan1still
  8020. nnul1:
  8021.  move.w #0,RIGHTCHANDATA+2
  8022.  st RIGHTCHANDATA+1
  8023. chan1still:
  8024.  
  8025.  tst.b NoiseMade1pRIGHT
  8026.  bne.s chan2still
  8027.  tst.w playnull2
  8028.  beq.s nnul2
  8029.  sub.w #100,playnull2
  8030.  bra.s chan2still
  8031. nnul2:
  8032.  move.w #0,RIGHTCHANDATA+2+4
  8033.  st RIGHTCHANDATA+1+4
  8034. chan2still:
  8035.  
  8036.  tst.b NoiseMade1pLEFT
  8037.  bne.s chan3still
  8038.  tst.w playnull3
  8039.  beq.s nnul3
  8040.  sub.w #100,playnull3
  8041.  bra.s chan3still
  8042. nnul3:
  8043.  move.w #0,LEFTCHANDATA+2+4
  8044.  st LEFTCHANDATA+1+4
  8045.  
  8046. chan3still:
  8047.  
  8048.  
  8049.  movem.l (a7)+,d0-d7/a0-a6
  8050.  
  8051.  moveq #0,d0
  8052.  rts
  8053.  
  8054. backbeat: dc.w 0
  8055.  
  8056. playnull0: dc.w 0
  8057. playnull1: dc.w 0
  8058. playnull2: dc.w 0
  8059. playnull3: dc.w 0
  8060.  
  8061. Samp0endRIGHT: dc.l emptyend
  8062. Samp1endRIGHT: dc.l emptyend
  8063. Samp2endRIGHT: dc.l emptyend
  8064. Samp3endRIGHT: dc.l emptyend
  8065. Samp0endLEFT: dc.l emptyend
  8066. Samp1endLEFT: dc.l emptyend
  8067. Samp2endLEFT: dc.l emptyend
  8068. Samp3endLEFT: dc.l emptyend
  8069.  
  8070. Aupt0: dc.l null
  8071. Auback0: dc.l null+500
  8072. Aupt2: dc.l null3
  8073. Auback2: dc.l null3+500
  8074. Aupt3: dc.l null4
  8075. Auback3: dc.l null4+500
  8076. Aupt1: dc.l null2
  8077. Auback1: dc.l null2+500
  8078.  
  8079. NoiseMade0LEFT: dc.b 0
  8080. NoiseMade1LEFT: dc.b 0
  8081. NoiseMade2LEFT: dc.b 0
  8082. NoiseMade3LEFT: dc.b 0
  8083. NoiseMade0pLEFT: dc.b 0
  8084. NoiseMade1pLEFT: dc.b 0
  8085. NoiseMade2pLEFT: dc.b 0
  8086. NoiseMade3pLEFT: dc.b 0
  8087. NoiseMade0RIGHT: dc.b 0
  8088. NoiseMade1RIGHT: dc.b 0
  8089. NoiseMade2RIGHT: dc.b 0
  8090. NoiseMade3RIGHT: dc.b 0
  8091. NoiseMade0pRIGHT: dc.b 0
  8092. NoiseMade1pRIGHT: dc.b 0
  8093. NoiseMade2pRIGHT: dc.b 0
  8094. NoiseMade3pRIGHT: dc.b 0
  8095.  
  8096. empty: ds.l 100
  8097. emptyend:
  8098.  
  8099. **************************************
  8100. * I want a routine to calculate all the
  8101. * info needed for the sound player to
  8102. * work, given say position of noise, volume
  8103. * and sample number.
  8104.  
  8105. Samplenum: dc.w 0
  8106. Noisex: dc.w 0
  8107. Noisez: dc.w 0
  8108. Noisevol: dc.w 0
  8109. chanpick: dc.w 0
  8110. IDNUM: dc.w 0
  8111. needleft: dc.b 0
  8112. needright: dc.b 0
  8113. STEREO: dc.b $0
  8114. even
  8115. prot6: dc.w 0
  8116.  
  8117.  even
  8118.  
  8119. CHANNELDATA:
  8120. LEFTCHANDATA:
  8121.  dc.l $00000000
  8122.  dc.l $00000000
  8123.  dc.l $FF000000
  8124.  dc.l $FF000000
  8125. RIGHTCHANDATA:
  8126.  dc.l $00000000
  8127.  dc.l $00000000
  8128.  dc.l $FF000000
  8129.  dc.l $FF000000
  8130.  
  8131. RIGHTPLAYEDTAB: ds.l 20
  8132. LEFTPLAYEDTAB: ds.l 20
  8133.  
  8134. MakeSomeNoise:
  8135.  
  8136. ; Plan for new sound handler:
  8137. ; It is sent a sample number,
  8138. ; a position relative to the
  8139. ; player, an id number and a volume.
  8140. ; Also notifplaying.
  8141.  
  8142. ; indirect inputs are the available
  8143. ; channel flags and whether or not
  8144. ; stereo sound is selected.
  8145.  
  8146. ; the algorithm must decide
  8147. ; whether the new sound is more
  8148. ; important than the ones already
  8149. ; playing. Thus an 'importance'
  8150. ; must be calculated, probably
  8151. ; using volume.
  8152.  
  8153. ; The output needs to be:
  8154.  
  8155. ; Write the pointers and volumes of
  8156. ; the sound channels
  8157.  
  8158.  
  8159.  tst.b notifplaying
  8160.  beq.s dontworry
  8161.  
  8162. ; find if we are already playing
  8163.  
  8164.  move.b IDNUM,d0
  8165.  move.w #7,d1
  8166.  lea CHANNELDATA,a3
  8167. findsameasme
  8168.  tst.b (a3)
  8169.  bne.s notavail
  8170.  cmp.b 1(a3),d0
  8171.  beq.b SameAsMe
  8172. notavail:
  8173.  add.w #4,a3
  8174.  dbra d1,findsameasme
  8175.  bra.b dontworry
  8176. SameAsMe
  8177.  rts
  8178.  
  8179. noiseloud: dc.w 0
  8180.  
  8181. dontworry:
  8182.  
  8183. ; Ok its fine for us to play a sound.
  8184. ; So calculate left/right volume.
  8185.  
  8186.  move.w Noisex,d1
  8187.  muls d1,d1
  8188.  move.w Noisez,d2
  8189.  muls d2,d2
  8190.  move.w #64,d3
  8191.  move.w #32767,noiseloud
  8192.  moveq #1,d0
  8193.  add.l d1,d2
  8194.  beq.b pastcalc
  8195.  
  8196.  move.w #31,d0
  8197. .findhigh
  8198.  btst d0,d2
  8199.  bne.b .foundhigh
  8200.  dbra d0,.findhigh
  8201. .foundhigh
  8202.  asr.w #1,d0
  8203.  clr.l d3
  8204.  bset d0,d3
  8205.  move.l d3,d0
  8206.  
  8207.  move.w d0,d3
  8208.  muls d3,d3    ; x*x
  8209.  sub.l d2,d3    ; x*x-a
  8210.  asr.l #1,d3    ; (x*x-a)/2
  8211.  divs d0,d3    ; (x*x-a)/2x
  8212.  sub.w d3,d0    ; second approx
  8213.  bgt.b .stillnot0
  8214.  move.w #1,d0
  8215. .stillnot0
  8216.  
  8217.  move.w d0,d3
  8218.  muls d3,d3
  8219.  sub.l d2,d3
  8220.  asr.l #1,d3
  8221.  divs d0,d3
  8222.  sub.w d3,d0    ; second approx
  8223.  bgt.b .stillnot02
  8224.  move.w #1,d0
  8225. .stillnot02
  8226.  
  8227.  move.w Noisevol,d3
  8228.  ext.l d3
  8229.  asl.l #6,d3
  8230.  cmp.l #32767,d3
  8231.  ble.s .nnnn
  8232.  move.l #32767,d3
  8233. .nnnn
  8234.  
  8235.  asr.w #2,d0
  8236.  addq #1,d0
  8237.  divs d0,d3
  8238.  
  8239.  move.w d3,noiseloud
  8240.  
  8241.  cmp.w #64,d3
  8242.  ble.s notooloud
  8243.  move.w #64,d3
  8244. notooloud:
  8245.  
  8246. pastcalc:
  8247.  
  8248.     ; d3 contains volume of noise.
  8249.     
  8250.  move.w d3,d4
  8251.  
  8252.  move.w d3,d2
  8253.  muls Noisex,d2
  8254.  asl.w #3,d0
  8255.  divs d0,d2
  8256.  
  8257.  bgt.s quietleft
  8258.  add.w d2,d4
  8259.  bge.s donequiet
  8260.  move.w #0,d4
  8261.  bra.s donequiet
  8262. quietleft:
  8263.  sub.w d2,d3
  8264.  bge.s donequiet
  8265.  move.w #0,d3
  8266. donequiet:
  8267.  
  8268. ; d3=leftvol?
  8269. ; d4=rightvol?
  8270.  
  8271.  clr.w needleft
  8272.  
  8273.  cmp.b d3,d4
  8274.  bgt.s RightLouder
  8275.  
  8276. ; Left is louder; is it MUCH louder?
  8277.  
  8278.  st needleft
  8279.  move.w d3,d2
  8280.  sub.w d4,d2
  8281.  cmp.w #32,d2
  8282.  slt needright
  8283.  bra.b aboutsame
  8284.  
  8285. RightLouder:
  8286.  st needright
  8287.  move.w d4,d2
  8288.  sub.w d3,d2
  8289.  cmp.w #32,d2
  8290.  slt needleft
  8291.  
  8292. aboutsame:
  8293.  
  8294.  tst.b STEREO
  8295.  beq NOSTEREO
  8296.  
  8297. ; Find least important sound on left
  8298.  
  8299.  move.l #0,a2
  8300.  move.l #0,d5
  8301.  move.w #32767,d2
  8302.  move.b IDNUM,d0
  8303.  lea LEFTCHANDATA,a3
  8304.  move.w #3,d1
  8305. FindLeftChannel
  8306.  tst.b (a3)
  8307.  bne.s .notactive
  8308.  cmp.b 1(a3),d0
  8309.  beq.s FOUNDLEFT
  8310.  cmp.w 2(a3),d2
  8311.  blt.s .notactive
  8312.  move.w 2(a3),d2
  8313.  move.l a3,a2
  8314.  move.w d5,d6
  8315.  
  8316. .notactive:
  8317.  add.w #4,a3
  8318.  add.w #1,d5
  8319.  dbra d1,FindLeftChannel
  8320.  move.l a2,a3
  8321.  bra.s gopastleft
  8322. FOUNDLEFT:
  8323.  move.w d5,d6
  8324. gopastleft:
  8325.  tst.l a3
  8326.  bne.s FOUNDALEFT
  8327.  rts
  8328. FOUNDALEFT:
  8329.  
  8330. ; d6 = channel number
  8331.  move.b d0,1(a3)
  8332.  move.w d3,2(a3)
  8333.  
  8334.  move.w Samplenum,d5
  8335.  move.l #SampleList,a3
  8336.  move.l (a3,d5.w*8),a1
  8337.  move.l 4(a3,d5.w*8),a2
  8338.  
  8339.  tst.b d6
  8340.  seq NoiseMade0LEFT
  8341.  beq.s .chan0
  8342.  cmp.b #2,d6
  8343.  slt NoiseMade1LEFT
  8344.  blt.b .chan1
  8345.  seq NoiseMade2LEFT
  8346.  beq.b .chan2
  8347.  st NoiseMade3LEFT
  8348.  
  8349.  move.b d5,LEFTPLAYEDTAB+9
  8350.  move.b d3,LEFTPLAYEDTAB+1+9
  8351.  move.b d4,LEFTPLAYEDTAB+2+9
  8352.  move.b d3,vol3left
  8353.  move.l a1,pos3LEFT
  8354.  move.l a2,Samp3endLEFT
  8355.  bra.b dorightchan
  8356.  
  8357. .chan0: 
  8358.  move.b d5,LEFTPLAYEDTAB
  8359.  move.b d3,LEFTPLAYEDTAB+1
  8360.  move.b d4,LEFTPLAYEDTAB+2
  8361.  move.l a1,pos0LEFT
  8362.  move.l a2,Samp0endLEFT
  8363.  move.b d3,vol0left
  8364.  bra.b dorightchan
  8365.  
  8366. .chan1:
  8367.  move.b d5,LEFTPLAYEDTAB+3
  8368.  move.b d3,LEFTPLAYEDTAB+1+3
  8369.  move.b d4,LEFTPLAYEDTAB+2+3
  8370.  move.b d3,vol1left
  8371.  move.l a1,pos1LEFT
  8372.  move.l a2,Samp1endLEFT
  8373.  bra.b dorightchan
  8374.  
  8375. .chan2: 
  8376.  move.b d5,LEFTPLAYEDTAB+6
  8377.  move.b d3,LEFTPLAYEDTAB+1+6
  8378.  move.b d4,LEFTPLAYEDTAB+2+6
  8379.  move.l a1,pos2LEFT
  8380.  move.l a2,Samp2endLEFT
  8381.  move.b d3,vol2left
  8382.  
  8383. dorightchan:
  8384.  
  8385. ; Find least important sound on right
  8386.  
  8387.  move.l #0,a2
  8388.  move.l #0,d5
  8389.  move.w #10000,d2
  8390.  move.b IDNUM,d0
  8391.  lea RIGHTCHANDATA,a3
  8392.  move.w #3,d1
  8393. FindRightChannel
  8394.  tst.b (a3)
  8395.  bne.s .notactive
  8396.  cmp.b 1(a3),d0
  8397.  beq.s FOUNDRIGHT
  8398.  cmp.w 2(a3),d2
  8399.  blt.s .notactive
  8400.  move.w 2(a3),d2
  8401.  move.l a3,a2
  8402.  move.w d5,d6
  8403.  
  8404. .notactive:
  8405.  add.w #4,a3
  8406.  add.w #1,d5
  8407.  dbra d1,FindRightChannel
  8408.  move.l a2,a3
  8409.  bra.s gopastright
  8410. FOUNDRIGHT:
  8411.  move.w d5,d6
  8412. gopastright:
  8413.  tst.l a3
  8414.  bne.s FOUNDARIGHT
  8415.  rts
  8416. FOUNDARIGHT:
  8417.  
  8418. ; d6 = channel number
  8419.  move.b d0,1(a3)
  8420.  move.w d3,2(a3)
  8421.  
  8422.  move.w Samplenum,d5
  8423.  move.l #SampleList,a3
  8424.  move.l (a3,d5.w*8),a1
  8425.  move.l 4(a3,d5.w*8),a2
  8426.  
  8427.  tst.b d6
  8428.  seq NoiseMade0RIGHT
  8429.  beq.s .chan0
  8430.  cmp.b #2,d6
  8431.  slt NoiseMade1RIGHT
  8432.  blt.b .chan1
  8433.  seq NoiseMade2RIGHT
  8434.  beq.b .chan2
  8435.  st NoiseMade3RIGHT
  8436.  
  8437.  move.b d5,RIGHTPLAYEDTAB+9
  8438.  move.b d3,RIGHTPLAYEDTAB+1+9
  8439.  move.b d4,RIGHTPLAYEDTAB+2+9
  8440.  move.b d4,vol3right
  8441.  move.l a1,pos3RIGHT
  8442.  move.l a2,Samp3endRIGHT
  8443.  rts
  8444.  
  8445. .chan0: 
  8446.  move.b d5,RIGHTPLAYEDTAB
  8447.  move.b d3,RIGHTPLAYEDTAB+1
  8448.  move.b d4,RIGHTPLAYEDTAB+2
  8449.  move.l a1,pos0RIGHT
  8450.  move.l a2,Samp0endRIGHT
  8451.  move.b d4,vol0right
  8452.  rts
  8453.  
  8454. .chan1:
  8455.  move.b d5,RIGHTPLAYEDTAB+3
  8456.  move.b d3,RIGHTPLAYEDTAB+1+3
  8457.  move.b d4,RIGHTPLAYEDTAB+2+3
  8458.  move.b d3,vol1right
  8459.  move.l a1,pos1RIGHT
  8460.  move.l a2,Samp1endRIGHT
  8461.  rts
  8462.  
  8463. .chan2: 
  8464.  move.b d5,RIGHTPLAYEDTAB+6
  8465.  move.b d3,RIGHTPLAYEDTAB+1+6
  8466.  move.b d4,RIGHTPLAYEDTAB+2+6
  8467.  move.l a1,pos2RIGHT
  8468.  move.l a2,Samp2endRIGHT
  8469.  move.b d3,vol2right
  8470.  rts
  8471.  
  8472. NOSTEREO:
  8473.  move.l #0,a2
  8474.  move.l #-1,d5
  8475.  move.w #32767,d2
  8476.  move.b IDNUM,d0
  8477.  lea CHANNELDATA,a3
  8478.  move.w #7,d1
  8479. FindChannel
  8480.  tst.b (a3)
  8481.  bne.s .notactive
  8482.  cmp.b 1(a3),d0
  8483.  beq.s FOUNDCHAN
  8484.  cmp.w 2(a3),d2
  8485.  blt.s .notactive
  8486.  move.w 2(a3),d2
  8487.  move.l a3,a2
  8488.  move.w d5,d6
  8489.  add.w #1,d6
  8490.  
  8491. .notactive:
  8492.  add.w #4,a3
  8493.  add.w #1,d5
  8494.  dbra d1,FindChannel
  8495.  
  8496.  move.l a2,a3
  8497.  bra.s gopastchan
  8498. FOUNDCHAN:
  8499.  move.w d5,d6
  8500.  add.w #1,d6
  8501. gopastchan:
  8502.  tst.w d6
  8503.  bge.s FOUNDACHAN
  8504. tooquiet:
  8505.  rts
  8506. FOUNDACHAN:
  8507.  
  8508. ; d6 = channel number
  8509.  
  8510.  cmp.w noiseloud,d2
  8511.  bgt.s tooquiet
  8512.  
  8513.  move.b d0,1(a3)
  8514.  move.w noiseloud,2(a3)
  8515.  
  8516.  move.w Samplenum,d5
  8517.  move.l #SampleList,a3
  8518.  move.l (a3,d5.w*8),a1
  8519.  move.l 4(a3,d5.w*8),a2
  8520.  
  8521.  tst.b d6
  8522.  beq.b .chan0
  8523.  cmp.b #2,d6
  8524.  blt .chan1
  8525.  beq .chan2
  8526.  cmp.b #4,d6
  8527.  blt.b .chan3
  8528.  beq .chan4
  8529.  cmp.b #6,d6
  8530.  blt .chan5
  8531.  beq .chan6
  8532.  st NoiseMade3RIGHT
  8533.  
  8534.  move.b d5,RIGHTPLAYEDTAB+9
  8535.  move.b d3,RIGHTPLAYEDTAB+1+9
  8536.  move.b d4,RIGHTPLAYEDTAB+2+9
  8537.  move.b d4,vol3right
  8538.  move.l a1,pos3RIGHT
  8539.  move.l a2,Samp3endRIGHT
  8540.  rts
  8541.  
  8542. .chan3:
  8543.  st NoiseMade3LEFT
  8544.  move.b d5,LEFTPLAYEDTAB+9
  8545.  move.b d3,LEFTPLAYEDTAB+1+9
  8546.  move.b d4,LEFTPLAYEDTAB+2+9
  8547.  move.b d3,vol3left
  8548.  move.l a1,pos3LEFT
  8549.  move.l a2,Samp3endLEFT
  8550.  bra dorightchan
  8551.  
  8552. .chan0: 
  8553.  st NoiseMade0LEFT
  8554.  move.b d5,LEFTPLAYEDTAB
  8555.  move.b d3,LEFTPLAYEDTAB+1
  8556.  move.b d4,LEFTPLAYEDTAB+2
  8557.  move.l a1,pos0LEFT
  8558.  move.l a2,Samp0endLEFT
  8559.  move.b d3,vol0left
  8560.  rts
  8561.  
  8562. .chan1:
  8563.  st NoiseMade1LEFT
  8564.  move.b d5,LEFTPLAYEDTAB+3
  8565.  move.b d3,LEFTPLAYEDTAB+1+3
  8566.  move.b d4,LEFTPLAYEDTAB+2+3
  8567.  move.b d3,vol1left
  8568.  move.l a1,pos1LEFT
  8569.  move.l a2,Samp1endLEFT
  8570.  rts
  8571.  
  8572. .chan2: 
  8573.  st NoiseMade2LEFT
  8574.  move.b d5,LEFTPLAYEDTAB+6
  8575.  move.b d3,LEFTPLAYEDTAB+1+6
  8576.  move.b d4,LEFTPLAYEDTAB+2+6
  8577.  move.l a1,pos2LEFT
  8578.  move.l a2,Samp2endLEFT
  8579.  move.b d3,vol2left
  8580.  rts
  8581.  
  8582. .chan4: 
  8583.  st NoiseMade0RIGHT
  8584.  move.b d5,RIGHTPLAYEDTAB
  8585.  move.b d3,RIGHTPLAYEDTAB+1
  8586.  move.b d4,RIGHTPLAYEDTAB+2
  8587.  move.l a1,pos0RIGHT
  8588.  move.l a2,Samp0endRIGHT
  8589.  move.b d4,vol0right
  8590.  rts
  8591.  
  8592. .chan5:
  8593.  st NoiseMade1RIGHT
  8594.  move.b d5,RIGHTPLAYEDTAB+3
  8595.  move.b d3,RIGHTPLAYEDTAB+1+3
  8596.  move.b d4,RIGHTPLAYEDTAB+2+3
  8597.  move.b d3,vol1right
  8598.  move.l a1,pos1RIGHT
  8599.  move.l a2,Samp1endRIGHT
  8600.  rts
  8601.  
  8602. .chan6: 
  8603.  st NoiseMade2RIGHT
  8604.  move.b d5,RIGHTPLAYEDTAB+6
  8605.  move.b d3,RIGHTPLAYEDTAB+1+6
  8606.  move.b d4,RIGHTPLAYEDTAB+2+6
  8607.  move.l a1,pos2RIGHT
  8608.  move.l a2,Samp2endRIGHT
  8609.  move.b d3,vol2right
  8610.  rts
  8611.  
  8612. SampleList:
  8613.  dc.l Scream,EndScream
  8614.  dc.l Shoot,EndShoot
  8615.  dc.l Munch,EndMunch
  8616.  dc.l PooGun,EndPooGun
  8617.  dc.l Collect,EndCollect
  8618. ;5
  8619.  dc.l DoorNoise,EndDoorNoise
  8620.  dc.l 0,0
  8621.  dc.l Stomp,EndStomp
  8622.  dc.l LowScream,EndLowScream
  8623.  dc.l BaddieGun,EndBaddieGun
  8624. ;10
  8625.  dc.l SwitchNoise,EndSwitch
  8626.  dc.l Reload,EndReload
  8627.  dc.l NoAmmo,EndNoAmmo
  8628.  dc.l Splotch,EndSplotch
  8629.  dc.l SplatPop,EndSplatPop
  8630. ;15
  8631.  dc.l Boom,EndBoom
  8632.  dc.l Hiss,EndHiss
  8633.  dc.l Howl1,EndHowl1
  8634.  dc.l Howl2,EndHowl2
  8635.  dc.l Pant,EndPant
  8636. ;20
  8637.  dc.l Whoosh,EndWhoosh
  8638.  dc.l ROAR,EndROAR
  8639.  dc.l whoosh,Endwhoosh
  8640.  dc.l 0,0
  8641.  dc.l 0,0
  8642.  dc.l 0,0
  8643.  dc.l 0,0
  8644.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8645.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8646.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8647.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8648.  
  8649.  dc.l 0
  8650.  
  8651. storeval: dc.w 0
  8652.  
  8653.  include "ab3:source/wallchunk.s"
  8654.  include "ab3:source/loadfromdisk.s"
  8655.  include "ab3:source/screensetup.s"
  8656.  include "ab3:source/CONTROLLOOP.s"
  8657.  
  8658.  
  8659.  
  8660.  
  8661. saveinters:  
  8662.  dc.w 0
  8663.  
  8664. z: dc.w 10
  8665.  
  8666. notifplaying:
  8667.  dc.w 0
  8668.  
  8669. audpos1: dc.w 0
  8670. audpos1b: dc.w 0
  8671. audpos2: dc.w 0
  8672. audpos2b: dc.w 0
  8673. audpos3: dc.w 0
  8674. audpos3b: dc.w 0
  8675. audpos4: dc.w 0
  8676. audpos4b: dc.w 0
  8677.  
  8678. vol0left: dc.w 0
  8679. vol0right: dc.w 0
  8680. vol1left: dc.w 0
  8681. vol1right: dc.w 0
  8682. vol2left: dc.w 0
  8683. vol2right: dc.w 0
  8684. vol3left: dc.w 0
  8685. vol3right: dc.w 0
  8686.  
  8687. pos: dc.l 0
  8688.  
  8689. pos0LEFT: dc.l empty
  8690. pos1LEFT: dc.l empty
  8691. pos2LEFT: dc.l empty
  8692. pos3LEFT: dc.l empty
  8693. pos0RIGHT: dc.l empty
  8694. pos1RIGHT: dc.l empty
  8695. pos2RIGHT: dc.l empty
  8696. pos3RIGHT: dc.l empty
  8697.  
  8698. numtodo dc.w 0
  8699.  
  8700. npt: dc.w 0
  8701.  
  8702. pretab:
  8703. val SET 0
  8704.  REPT 128
  8705.  dc.b val
  8706. val SET val+1
  8707.  ENDR
  8708. val SET -128
  8709.  REPT 128
  8710.  dc.b val
  8711. val SET val+1
  8712.  ENDR 
  8713.  
  8714. tab:
  8715.  ds.b 256*65
  8716.  
  8717.  
  8718. test: dc.l 0
  8719.  ds.l 30
  8720.  
  8721.  even
  8722. ConstCols:
  8723. ; incbin "ConstCols"
  8724.  even
  8725. Smoothscalecols:
  8726. ; incbin "smoothbumppalscaled"
  8727.  even
  8728. SmoothTile:
  8729. ; incbin "smoothbumptile"
  8730.  even
  8731. Bumpscalecols:
  8732. ; incbin "Bumppalscaled"
  8733.  even
  8734. Bumptile:
  8735. ; incbin "bumptile"
  8736.  even
  8737. scalecols: ;incbin "bytepixpalscaled"
  8738.  even
  8739. floorscalecols:
  8740.  incbin "floorpalscaled"
  8741.  ds.w 256*4
  8742.  
  8743.  even
  8744. PaletteAddr: dc.l 0
  8745. ChunkAddr: dc.l 0
  8746. ;walltiles:
  8747. ; dc.l GreenMechanicWALL
  8748. ; dc.l BlueGreyMetalWALL
  8749. ; dc.l TechnoDetailWALL
  8750. ; dc.l BlueStoneWALL
  8751. ; dc.l RedAlertWALL
  8752. ; dc.l RockWALL
  8753. ;
  8754. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8755. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8756. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8757. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8758. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8759. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8760.  
  8761. floortile:
  8762.  dc.l 0
  8763. ; incbin "floortile" 
  8764.  even
  8765. wallrouts:
  8766. ; incbin "2x2WallDraw" 
  8767.  CNOP 0,64
  8768. BackPicture:
  8769.  incbin "backfile"
  8770. EndBackPicture:
  8771.  
  8772. drawpt: dc.l 0
  8773. olddrawpt: dc.l 0
  8774. frompt: dc.l 0 
  8775.  
  8776. SineTable:
  8777.  incbin "bigsine"
  8778.  
  8779. angspd: dc.w 0
  8780. flooryoff: dc.w 0
  8781. xoff: dc.l 0
  8782. yoff: dc.l 0
  8783. yvel: dc.l 0
  8784. zoff: dc.l 0
  8785. tyoff: dc.l 0
  8786. xspdval: dc.l 0
  8787. zspdval: dc.l 0
  8788. Zone: dc.w 0
  8789.  
  8790. PLR1: dc.b $ff
  8791.  even
  8792. PLR1_energy: dc.w 191
  8793. PLR1_GunSelected: dc.w 0
  8794. PLR1_cosval: dc.w 0
  8795. PLR1_sinval: dc.w 0
  8796. PLR1_angpos: dc.w 0
  8797. PLR1_angspd: dc.w 0
  8798. PLR1_xoff: dc.l 0
  8799. PLR1_yoff: dc.l 0
  8800. PLR1_yvel: dc.l 0
  8801. PLR1_zoff: dc.l 0
  8802. PLR1_tyoff: dc.l 0
  8803. PLR1_xspdval: dc.l 0
  8804. PLR1_zspdval: dc.l 0
  8805. PLR1_Zone: dc.w 0
  8806. PLR1_Roompt: dc.l 0
  8807. PLR1_OldRoompt: dc.l 0
  8808. PLR1_PointsToRotatePtr: dc.l 0
  8809. PLR1_ListOfGraphRooms: dc.l 0
  8810. PLR1_oldxoff: dc.l 0
  8811. PLR1_oldzoff: dc.l 0
  8812. PLR1_StoodInTop: dc.b 0
  8813.  even
  8814. PLR1_height: dc.l 0
  8815.  
  8816.  ds.w 4
  8817.  
  8818. OLDX1: dc.l 0
  8819. OLDX2: dc.l 0
  8820. OLDZ1: dc.l 0
  8821. OLDZ2: dc.l 0
  8822.  
  8823. XDIFF1: dc.l 0
  8824. ZDIFF1: dc.l 0
  8825. XDIFF2: dc.l 0
  8826. ZDIFF2: dc.l 0
  8827.  
  8828. PLR1s_cosval: dc.w 0
  8829. PLR1s_sinval: dc.w 0
  8830. PLR1s_angpos: dc.w 0
  8831. PLR1s_angspd: dc.w 0
  8832. PLR1s_xoff: dc.l 0
  8833. PLR1s_yoff: dc.l 0
  8834. PLR1s_yvel: dc.l 0
  8835. PLR1s_zoff: dc.l 0
  8836. PLR1s_tyoff: dc.l 0
  8837. PLR1s_xspdval: dc.l 0
  8838. PLR1s_zspdval: dc.l 0
  8839. PLR1s_Zone: dc.w 0
  8840. PLR1s_Roompt: dc.l 0
  8841. PLR1s_OldRoompt: dc.l 0
  8842. PLR1s_PointsToRotatePtr: dc.l 0
  8843. PLR1s_ListOfGraphRooms: dc.l 0
  8844. PLR1s_oldxoff: dc.l 0
  8845. PLR1s_oldzoff: dc.l 0
  8846. PLR1s_height: dc.l 0
  8847. PLR1s_targheight: dc.l 0
  8848.  
  8849. p1_xoff: dc.l 0
  8850. p1_zoff: dc.l 0
  8851. p1_yoff: dc.l 0
  8852. p1_height: dc.l 0
  8853. p1_angpos: dc.w 0
  8854. p1_bobble: dc.w 0
  8855. p1_clicked: dc.b 0
  8856. p1_spctap: dc.b 0
  8857. p1_ducked: dc.b 0
  8858. p1_gunselected: dc.b 0
  8859. p1_fire: dc.b 0
  8860.  even
  8861. p1_holddown: dc.w 0
  8862.  
  8863.  ds.w 4
  8864.  
  8865. PLR2: dc.b $ff
  8866.  even
  8867. PLR2_GunSelected: dc.w 0
  8868. PLR2_energy: dc.w 191
  8869. PLR2_cosval: dc.w 0
  8870. PLR2_sinval: dc.w 0
  8871. PLR2_angpos: dc.w 0
  8872. PLR2_angspd: dc.w 0
  8873. PLR2_xoff: dc.l 0
  8874. PLR2_yoff: dc.l 0
  8875. PLR2_yvel: dc.l 0
  8876. PLR2_zoff: dc.l 0
  8877. PLR2_tyoff: dc.l 0
  8878. PLR2_xspdval: dc.l 0
  8879. PLR2_zspdval: dc.l 0
  8880. PLR2_Zone: dc.w 0
  8881. PLR2_Roompt: dc.l 0
  8882. PLR2_OldRoompt: dc.l 0
  8883. PLR2_PointsToRotatePtr: dc.l 0
  8884. PLR2_ListOfGraphRooms: dc.l 0
  8885. PLR2_oldxoff: dc.l 0
  8886. PLR2_oldzoff: dc.l 0
  8887. PLR2_StoodInTop: dc.b 0
  8888.  even
  8889. PLR2_height: dc.l 0
  8890.  
  8891.  ds.w 4
  8892.  
  8893. PLR2s_cosval: dc.w 0
  8894. PLR2s_sinval: dc.w 0
  8895. PLR2s_angpos: dc.w 0
  8896. PLR2s_angspd: dc.w 0
  8897. PLR2s_xoff: dc.l 0
  8898. PLR2s_yoff: dc.l 0
  8899. PLR2s_yvel: dc.l 0
  8900. PLR2s_zoff: dc.l 0
  8901. PLR2s_tyoff: dc.l 0
  8902. PLR2s_xspdval: dc.l 0
  8903. PLR2s_zspdval: dc.l 0
  8904. PLR2s_Zone: dc.w 0
  8905. PLR2s_Roompt: dc.l 0
  8906. PLR2s_OldRoompt: dc.l 0
  8907. PLR2s_PointsToRotatePtr: dc.l 0
  8908. PLR2s_ListOfGraphRooms: dc.l 0
  8909. PLR2s_oldxoff: dc.l 0
  8910. PLR2s_oldzoff: dc.l 0
  8911. PLR2s_height: dc.l 0
  8912. PLR2s_targheight: dc.l 0
  8913.  
  8914.  ds.w 4
  8915.  
  8916. p2_xoff: dc.l 0
  8917. p2_zoff: dc.l 0
  8918. p2_yoff: dc.l 0
  8919. p2_height: dc.l 0
  8920. p2_angpos: dc.w 0
  8921. p2_bobble: dc.w 0
  8922. p2_clicked: dc.b 0
  8923. p2_spctap: dc.b 0
  8924. p2_ducked: dc.b 0
  8925. p2_gunselected: dc.b 0
  8926. p2_fire: dc.b 0
  8927.  even
  8928. p2_holddown: dc.w 0
  8929.  
  8930.  
  8931. liftanimtab:
  8932.  
  8933.  
  8934. endliftanimtab:
  8935.  
  8936. glassball:
  8937. ; incbin "glassball.inc"
  8938. endglass
  8939. glassballpt: dc.l glassball
  8940.  
  8941. rndtab: ; incbin "randfile"
  8942. endrnd: 
  8943.  
  8944. brightanimtab:
  8945.  dcb.w 200,20
  8946.  dc.w 5
  8947.  dc.w 10,20
  8948.  dc.w 5
  8949.  dcb.w 30,20
  8950.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8951.  dcb.w 40,0
  8952.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8953.  dcb.w 300,0
  8954.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8955.  dc.w -1
  8956.  
  8957. Roompt: dc.l 0
  8958. OldRoompt: dc.l 0
  8959.  
  8960. *****************************************************************
  8961.  *
  8962.  include "AB3:source/LevelData2"
  8963.  *
  8964. *****************************************************************
  8965.  
  8966.  
  8967. wallpt: dc.l 0
  8968. floorpt: dc.l 0
  8969.  
  8970. Rotated:
  8971.  ds.l 2*800 
  8972. ObjRotated:
  8973.  ds.l 2*500
  8974.  
  8975. OnScreen:
  8976.  ds.l 2*800 
  8977.  
  8978. startwait: dc.w 0
  8979. endwait: dc.w 0
  8980.  
  8981. Faces:; incbin "faces2raw"
  8982.  
  8983. *******************************************************************
  8984.  
  8985. consttab:
  8986.  incbin "constantfile"
  8987.  
  8988. *******************************************************************
  8989.  
  8990.  
  8991.  
  8992. *********************************
  8993.  
  8994. ; include "ab3:source/loadmod.a"
  8995. ; include "ab3:source/proplayer.a"
  8996.  
  8997.  
  8998. darkentab: incbin "darkenedcols"
  8999. brightentab: incbin "brightenfile"
  9000. WorkSpace:
  9001.  ds.l 8192 
  9002. waterfile: incbin "waterfile"
  9003.  
  9004.  SECTION ffff,CODE_C
  9005.  
  9006. nullspr: dc.l 0
  9007.  
  9008.  cnop 0,8
  9009. borders:
  9010.  incbin "newleftbord"
  9011.  incbin "newrightbord"
  9012.  
  9013. health: incbin "healthstrip"
  9014. Ammunition: incbin "ammostrip"
  9015. healthpal: incbin "healthpal"
  9016. PanelKeys: incbin "greenkey"
  9017.  incbin "redkey"
  9018.  incbin "yellowkey"
  9019.  incbin "bluekey"
  9020.  
  9021. null: ds.w 500
  9022. null2: ds.w 500
  9023. null3: ds.w 500
  9024. null4: ds.w 500
  9025.  
  9026.  
  9027. Blurbfield:
  9028.  
  9029.  dc.w bpl1ptl
  9030. bl1l: dc.w 0
  9031.  dc.w bpl1pth
  9032. bl1h: dc.w 0
  9033.  
  9034.  dc.w diwstart,$2c81
  9035.  dc.w diwstop,$1cc1
  9036.  dc.w ddfstart,$38
  9037.  dc.w ddfstop,$b8
  9038.  dc.w bplcon0,$9201
  9039.  dc.w bplcon1,0
  9040.  dc.w $106,$c40
  9041. blcols:
  9042.  dc.w col0,0
  9043.  dc.w col1,$fff
  9044.  
  9045.  dc.w $108,0
  9046.  dc.w $10a,0
  9047.  
  9048.  dc.w $ffff,$fffe
  9049.  dc.w $ffff,$fffe
  9050.  
  9051. nullline:
  9052.  ds.b 80    
  9053.  
  9054.  include "ab3:source/titlecop.s"
  9055.  
  9056. bigfield:    
  9057.                 ; Start of our copper list.
  9058.  
  9059.  dc.w dmacon,$8020
  9060.  dc.w intreq,$8011
  9061.  dc.w $1fc,$f
  9062.  dc.w diwstart
  9063. winstart: dc.w $2cb1
  9064.  dc.w diwstop
  9065. winstop: dc.w $2c91
  9066.  dc.w ddfstart
  9067. fetchstart: dc.w $48
  9068.  dc.w ddfstop
  9069. fetchstop: dc.w $88
  9070.  
  9071. bordercols:
  9072.  incbin "borderpal"
  9073.  
  9074.  dc.w spr0ptl
  9075. s0l:
  9076.  dc.w 0
  9077.  dc.w spr0pth
  9078. s0h:
  9079.  dc.w 0
  9080.  dc.w spr1ptl
  9081. s1l:
  9082.  dc.w 0
  9083.  dc.w spr1pth
  9084. s1h:
  9085.  dc.w 0
  9086.  dc.w spr2ptl
  9087. s2l:
  9088.  dc.w 0
  9089.  dc.w spr2pth
  9090. s2h:
  9091.  dc.w 0
  9092.  dc.w spr3ptl
  9093. s3l:
  9094.  dc.w 0
  9095.  dc.w spr3pth
  9096. s3h:
  9097.  dc.w 0
  9098.  dc.w spr4ptl
  9099. s4l:
  9100.  dc.w 0
  9101.  dc.w spr4pth
  9102. s4h:
  9103.  dc.w 0
  9104.  dc.w spr5ptl
  9105. s5l:
  9106.  dc.w 0
  9107.  dc.w spr5pth
  9108. s5h:
  9109.  dc.w 0
  9110.  dc.w spr6ptl
  9111. s6l:
  9112.  dc.w 0
  9113.  dc.w spr6pth
  9114. s6h:
  9115.  dc.w 0
  9116.  dc.w spr7ptl
  9117. s7l:
  9118.  dc.w 0
  9119.  dc.w spr7pth
  9120. s7h:
  9121.  dc.w 0
  9122.  
  9123.  
  9124.  dc.w $106,$c42
  9125.  incbin "borderpal"
  9126.  
  9127.  dc.w $106,$8c42
  9128.  dc.w col0
  9129. hitcol: dc.w $0
  9130.  dc.w $106,$c42
  9131.  dc.w col0
  9132. hitcol2: dc.w 0
  9133.  
  9134.  dc.w bplcon0,$7201
  9135.  dc.w bplcon1
  9136. smoff:
  9137.  dc.w $0
  9138.  
  9139.  dc.w $108
  9140. modulo: dc.w -24
  9141.  dc.w $10a,-24
  9142.  
  9143.  dc.w bpl1pth
  9144. pl1h
  9145.  dc.w 0
  9146.  
  9147.  dc.w bpl1ptl
  9148. pl1l
  9149.  dc.w 0
  9150.  
  9151.  dc.w bpl2pth
  9152. pl2h
  9153.  dc.w 0
  9154.  
  9155.  dc.w bpl2ptl
  9156. pl2l
  9157.  dc.w 0
  9158.  
  9159.  dc.w bpl3pth
  9160. pl3h
  9161.  dc.w 0
  9162.  
  9163.  dc.w bpl3ptl
  9164. pl3l
  9165.  dc.w 0
  9166.  
  9167.  dc.w bpl4pth
  9168. pl4h
  9169.  dc.w 0
  9170.  
  9171.  dc.w bpl4ptl
  9172. pl4l
  9173.  dc.w 0
  9174.  
  9175.  dc.w bpl5pth
  9176. pl5h
  9177.  dc.w 0
  9178.  
  9179.  dc.w bpl5ptl
  9180. pl5l
  9181.  dc.w 0
  9182.  
  9183.  dc.w bpl6pth
  9184. pl6h
  9185.  dc.w 0
  9186.  
  9187.  dc.w bpl6ptl
  9188. pl6l
  9189.  dc.w 0
  9190.  
  9191.  dc.w bpl7pth
  9192. pl7h
  9193.  dc.w 0
  9194.  
  9195.  dc.w bpl7ptl
  9196. pl7l
  9197.  dc.w 0
  9198.  
  9199.  
  9200.  dc.w $1001,$ff00
  9201.  dc.w intreq,$11
  9202. yposcop:
  9203.  dc.w $2a11,$fffe
  9204.  dc.w $8a,0
  9205.  
  9206. ; ds.l 104*12
  9207.  
  9208. ;colbars:
  9209. ;val SET $2a
  9210. ; dcb.l 104*80,$1fe0000
  9211. ; dc.w $106,$c42
  9212. ; dc.w $80
  9213. ;pch1:
  9214. ; dc.w 0
  9215. ; dc.w $82
  9216. ;pcl1:
  9217. ; dc.w 0 
  9218. ; dc.w $88,0
  9219. ; dc.w $ffff,$fffe       ; End copper list.
  9220.  
  9221. ; ds.l 104*12
  9222.  
  9223. ;colbars2:
  9224. ;val SET $2a
  9225. ; dcb.l 104*80,$1fe0000
  9226. ; dc.w $106,$c42
  9227. ; dc.w $80
  9228. ;pch2:
  9229. ; dc.w 0
  9230. ; dc.w $82
  9231. ;pcl2:
  9232. ; dc.w 0
  9233. ; dc.w $88,0
  9234. ; dc.w $ffff,$fffe       ; End copper list.
  9235.  
  9236. ; ds.l 104*10
  9237.  
  9238. NullCopper:
  9239.  dc.w $ffff,$fffe
  9240.  
  9241. old: dc.l 0
  9242.  
  9243. prot5: dc.w 0
  9244. PanelCop:
  9245.  
  9246.  dc.w $80
  9247. och:
  9248.  dc.w 0
  9249.  dc.w $82
  9250. ocl:
  9251.  dc.w 0
  9252.  
  9253. statskip:
  9254.  dc.w $1fe,0
  9255.  dc.w $1fe,0
  9256.  
  9257.  dc.w $10c,0
  9258.  dc.w bplcon0,$1201
  9259.  dc.w bpl1ptl
  9260. n1l:
  9261.  dc.w 0
  9262.  dc.w bpl1pth
  9263. n1h:
  9264.  dc.w 0
  9265.  dc.w $108,-24
  9266.  incbin "Panelpal"
  9267.  
  9268.  dc.w bpl2pth
  9269. p2h
  9270.  dc.w 0
  9271.  
  9272.  dc.w bpl2ptl
  9273. p2l
  9274.  dc.w 0
  9275.  
  9276.  dc.w bpl3pth
  9277. p3h
  9278.  dc.w 0
  9279.  
  9280.  dc.w bpl3ptl
  9281. p3l
  9282.  dc.w 0
  9283.  
  9284.  dc.w bpl4pth
  9285. p4h
  9286.  dc.w 0
  9287.  dc.w bpl4ptl
  9288. p4l
  9289.  dc.w 0
  9290.  dc.w bpl5pth
  9291. p5h
  9292.  dc.w 0
  9293.  dc.w bpl5ptl
  9294. p5l
  9295.  dc.w 0
  9296.  dc.w bpl6pth
  9297. p6h
  9298.  dc.w 0
  9299.  dc.w bpl6ptl
  9300. p6l
  9301.  dc.w 0
  9302.  dc.w bpl7pth
  9303. p7h
  9304.  dc.w 0
  9305.  dc.w bpl7ptl
  9306. p7l
  9307.  dc.w 0
  9308.  dc.w bpl8pth
  9309. p8h
  9310.  dc.w 0
  9311.  dc.w bpl8ptl
  9312. p8l
  9313.  dc.w 0
  9314.  
  9315.  
  9316.  dc.w ddfstart,$38
  9317.  dc.w ddfstop,$b8
  9318.  dc.w diwstart,$2c81
  9319.  dc.w diwstop,$2cc1
  9320.  
  9321.  dc.w bplcon0
  9322. Panelcon: dc.w $0211
  9323.  dc.w bpl1pth
  9324. p1h
  9325.  dc.w 0
  9326.  
  9327.  dc.w bpl1ptl
  9328. p1l
  9329.  dc.w 0
  9330.  
  9331.  
  9332.  dc.w $108,40*7
  9333.  dc.w $10a,40*7
  9334.  
  9335.  dc.w $ffff,$fffe
  9336.  
  9337.  dc.w $180,$fff
  9338.  
  9339.  
  9340.  dc.w $f801,$ff00
  9341.  dc.w col1,$50
  9342.  dc.w $f901,$ff00
  9343.  dc.w col1,$90
  9344.  dc.w $fa01,$ff00
  9345.  dc.w col1,$f0
  9346.  dc.w $fb01,$ff00
  9347.  dc.w col1,$f0
  9348.  dc.w $fc01,$ff00
  9349.  dc.w col1,$90
  9350.  dc.w $fd01,$ff00
  9351.  dc.w col1,$50
  9352.  
  9353.  dc.w $fe01,$ff00
  9354.  dc.w col1,$fff
  9355.  
  9356.  dc.w $ffdf,$fffe
  9357.  dc.w $a01,$ff00
  9358.  dc.w bplcon0,$201
  9359.  
  9360.  incbin "faces2cols"
  9361.  dc.w bpl1pth
  9362. f1h
  9363.  dc.w 0
  9364.  
  9365.  dc.w bpl1ptl
  9366. f1l
  9367.  dc.w 0
  9368.  
  9369.  dc.w bpl2pth
  9370. f2h
  9371.  dc.w 0
  9372.  
  9373.  dc.w bpl2ptl
  9374. f2l
  9375.  dc.w 0
  9376.  
  9377.  dc.w bpl3pth
  9378. f3h
  9379.  dc.w 0
  9380.  
  9381.  dc.w bpl3ptl
  9382. f3l
  9383.  dc.w 0
  9384.  
  9385.  dc.w bpl4pth
  9386. f4h
  9387.  dc.w 0
  9388.  dc.w bpl4ptl
  9389. f4l
  9390.  dc.w 0
  9391.  
  9392.  dc.w bpl5pth
  9393. f5h
  9394.  dc.w 0
  9395.  dc.w bpl5ptl
  9396. f5l
  9397.  dc.w 0
  9398.  
  9399.  dc.w $0c01,$ff00
  9400.  dc.w bplcon0,$5201
  9401.   
  9402.  dc.w $ffff,$fffe
  9403.  
  9404.  cnop 0,64
  9405. FacePlace:
  9406. ; ds.l 6*32*5
  9407.  
  9408. TEXTSCRN: dc.l 0
  9409.  
  9410. TEXTCOP:
  9411.  dc.w intreq,$8030
  9412.  
  9413.  dc.w spr0ptl
  9414. txs0l:
  9415.  dc.w 0
  9416.  dc.w spr0pth
  9417. txs0h:
  9418.  dc.w 0
  9419.  dc.w spr1ptl
  9420. txs1l:
  9421.  dc.w 0
  9422.  dc.w spr1pth
  9423. txs1h:
  9424.  dc.w 0
  9425.  dc.w spr2ptl
  9426. txs2l:
  9427.  dc.w 0
  9428.  dc.w spr2pth
  9429. txs2h:
  9430.  dc.w 0
  9431.  dc.w spr3ptl
  9432. txs3l:
  9433.  dc.w 0
  9434.  dc.w spr3pth
  9435. txs3h:
  9436.  dc.w 0
  9437.  dc.w spr4ptl
  9438. txs4l:
  9439.  dc.w 0
  9440.  dc.w spr4pth
  9441. txs4h:
  9442.  dc.w 0
  9443.  dc.w spr5ptl
  9444. txs5l:
  9445.  dc.w 0
  9446.  dc.w spr5pth
  9447. txs5h:
  9448.  dc.w 0
  9449.  dc.w spr6ptl
  9450. txs6l:
  9451.  dc.w 0
  9452.  dc.w spr6pth
  9453. txs6h:
  9454.  dc.w 0
  9455.  dc.w spr7ptl
  9456. txs7l:
  9457.  dc.w 0
  9458.  dc.w spr7pth
  9459. txs7h:
  9460.  dc.w 0
  9461.  
  9462.  
  9463.  dc.w $10c,$0088
  9464.  
  9465.  dc.w $1fc,$f
  9466.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9467.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9468.  dc.w ddfstart,$38      ; Data fetch start.
  9469.  dc.w ddfstop,$c8       ; Data fetch stop.
  9470.  
  9471.  dc.w bplcon0
  9472. TSCP:
  9473.  dc.w $9201
  9474.  
  9475.  dc.w $106,$c40
  9476.  
  9477.  dc.w $2a01,$ff00
  9478.  
  9479.  dc.w col0,0
  9480.  dc.w col1
  9481. TOPLET:
  9482. TXTCOLL:
  9483.  dc.w 0
  9484.   dc.w col2
  9485. BOTLET:
  9486.  dc.w 0
  9487.  dc.w col3
  9488. ALLTEXT:
  9489.  dc.w $fff
  9490.  dc.w $106,$e40
  9491.  dc.w col3
  9492. ALLTEXTLOW:
  9493.  dc.w $0
  9494.  
  9495.  
  9496.  dc.w bpl1pth
  9497. TSPTh:
  9498.  dc.w 0
  9499.  dc.w bpl1ptl
  9500. TSPTl:
  9501.  dc.w 0
  9502.  
  9503.  dc.w bpl2pth
  9504. TSPTh2:
  9505.  dc.w 0
  9506.  dc.w bpl2ptl
  9507. TSPTl2:
  9508.  dc.w 0
  9509.  
  9510.  
  9511.  dc.w $108,0
  9512.  dc.w $10a,0
  9513.  
  9514.  dc.w $ffff,$fffe
  9515.  
  9516. ********************************************
  9517. * Stuff you don't have to worry about yet. *
  9518. ********************************************
  9519.  
  9520. closeeverything:
  9521.  
  9522.  jsr mt_end
  9523.  
  9524.  move.l #nullcop,d0
  9525. ; move.l old,d0
  9526.  
  9527.  move.l d0,$dff080     ; Restore old copper list.
  9528.  move.w d0,ocl
  9529.  swap d0
  9530.  move.w d0,och
  9531.  
  9532. ; move.l doslib,a6
  9533. ; move.l #4,d1
  9534. ; jsr -198(a6)
  9535.  
  9536. ; move.l doslib,d0
  9537. ; move.l d0,a1
  9538. ; move.l 4.w,a6
  9539. ; jsr CloseLib(a6)
  9540.  
  9541.  move.l #$dff000,a6
  9542.  move.w #$8020,dmacon(a6)
  9543.  move.w #$f,dmacon(a6)
  9544.  
  9545. ; move.l 4.w,a6
  9546. ; lea VBLANKInt,a1
  9547. ; moveq #INTB_COPER,d0
  9548. ; jsr _LVORemIntServer(a6)
  9549.  
  9550. ; IFEQ CD32VER
  9551. ; move.l OLDKINT,$68.w
  9552. ; ENDC
  9553. ; move.w saveinters,d0
  9554. ; or.w #$c000,d0
  9555. ; move.w d0,intena(a6)
  9556.  clr.w $dff0a8
  9557.  clr.w $dff0b8
  9558.  clr.w $dff0c8
  9559.  clr.w $dff0d8
  9560.  
  9561.  
  9562. ; move.l oldview,a1
  9563. ; move.l a1,d0
  9564. ; move.l gfxbase,a6
  9565. ; jsr -$de(a6)
  9566.  
  9567. ; cmp.b #'s',mors
  9568. ; beq.s leaveold
  9569. ; move.w #$f8e,$dff1dc
  9570. ;leaveold:
  9571.  
  9572.  jsr RELEASELEVELMEM
  9573.  jsr RELEASESCRNMEM
  9574.  
  9575.  move.l #0,d0
  9576.  
  9577.  rts
  9578.  
  9579.  
  9580.  
  9581. intbase: dc.l 0
  9582. gfxbase: dc.l 0
  9583. oldview: dc.l 0
  9584.  
  9585. stuff:
  9586.  
  9587.     PRSDL
  9588.     Lea    gfxname(pc),a1    
  9589.     Moveq.l    #0,d0
  9590.     Move.l    $4.w,a6    
  9591.     Jsr    -$228(a6)
  9592.     add.w d1,RVAL1
  9593.     Move.l     d0,gfxbase
  9594.     Move.l    d0,a6                Use As Base Reg
  9595.     Move.l    34(a6),oldview
  9596.     move.l 38(a6),old
  9597.     rts
  9598.  
  9599. gfxname dc.b "graphics.library",0
  9600.  even
  9601. INTUNAME    dc.b    "intuition.library",0
  9602.  
  9603.  even
  9604.  
  9605.  
  9606.  cnop 0,64
  9607.  
  9608. Panel:
  9609.  dc.l 0
  9610.  
  9611. TimerScr: 
  9612. ;ds.b 40*64
  9613.  
  9614. scrntab:
  9615.  ds.b 16
  9616. val SET 32
  9617.  REPT 96
  9618.  dc.b val,val,val
  9619. val SET val+1
  9620.  ENDR
  9621.  ds.b 16
  9622.  
  9623. smallscrntab:
  9624. val SET 32
  9625.  REPT 96
  9626.  dc.b val,val
  9627. val SET val+1
  9628.  ENDR
  9629.  
  9630.  cnop 0,64
  9631. scrn:
  9632.  
  9633.  dcb.l 8,$33333333
  9634.  dc.l 0
  9635.  dc.l 0
  9636.  
  9637.  dcb.l 8,$0f0f0f0f
  9638.  dc.l 0
  9639.  dc.l 0
  9640.  
  9641.  dcb.l 8,$00ff00ff
  9642.  dc.l 0
  9643.  dc.l 0
  9644.  
  9645.  dcb.l 8,$0000ffff
  9646.  dc.l 0
  9647.  dc.l 0
  9648.  
  9649.  dc.l 0,-1,0,-1,0,-1,0,-1
  9650.  dc.l 0
  9651.  dc.l 0
  9652.  
  9653.  dc.l -1,-1,0,0,-1,-1,0,0
  9654.  dc.l 0
  9655.  dc.l 0
  9656.  
  9657.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9658.  dc.l 0
  9659.  dc.l 0
  9660.  
  9661. NumTimes: dc.l 0
  9662. TimeCount: dc.l 0
  9663. oldtime: dc.l 0
  9664. counting: dc.b 0
  9665. oktodisplay: dc.b 0
  9666.  
  9667. INITTIMER:
  9668.  move.l #0,TimeCount
  9669.  move.l #0,NumTimes
  9670.  rts
  9671.  
  9672. STARTCOUNT:
  9673.  move.l d0,-(a7)
  9674.  move.l $dff004,d0
  9675.  and.l #$1ffff,d0
  9676.  move.l d0,oldtime
  9677.  st counting
  9678.  move.l (a7)+,d0
  9679.  rts
  9680.  
  9681. STOPCOUNT:
  9682.  move.l d0,-(a7)
  9683.  move.l $dff004,d0
  9684.  and.l #$1ffff,d0
  9685.  
  9686.  sub.l oldtime,d0
  9687.  cmp.l #-256,d0
  9688.  bge.s okcount
  9689.  add.l #313*256,d0
  9690. okcount:
  9691.  add.l d0,TimeCount
  9692.  addq.l #1,NumTimes
  9693.  clr.b counting
  9694.  move.l (a7)+,d0
  9695.  rts
  9696.  
  9697. STOPCOUNTNOADD:
  9698.  move.l d0,-(a7)
  9699.  move.l $dff004,d0
  9700.  and.l #$1ffff,d0
  9701.  
  9702.  sub.l oldtime,d0
  9703.  cmp.l #-256,d0
  9704.  bge.s okcount2
  9705.  add.l #313*256,d0
  9706. okcount2:
  9707.  add.l d0,TimeCount
  9708.  clr.b counting
  9709.  move.l (a7)+,d0
  9710.  rts
  9711.  
  9712. maxbot: dc.w 0
  9713. tstneg: dc.l 0
  9714.  
  9715. STOPTIMER:
  9716.  st oktodisplay
  9717.  rts
  9718.  
  9719. digits: incbin "numbers.inc"
  9720.  
  9721.  
  9722.  Section Sounds,CODE_C
  9723.  
  9724. nullcop:
  9725.  dc.w $106,$c40
  9726.  dc.w $180,0 
  9727.  dc.w $100,$0
  9728.  dc.w $ffff,$fffe
  9729.  
  9730. Scream:
  9731. ; incbin "ab3:sounds/Scream"
  9732. ; ds.w 100
  9733. EndScream:
  9734. LowScream:
  9735. ; incbin "ab3:sounds/LowScream"
  9736. ; ds.w 100
  9737. EndLowScream:
  9738. BaddieGun:
  9739. ; incbin "ab3:sounds/BaddieGun"
  9740. EndBaddieGun:
  9741. bass:
  9742. ; incbin "ab3:sounds/backbass+drum"
  9743. bassend:
  9744. Shoot:
  9745. ; incbin "ab3:sounds/fire!"
  9746. EndShoot:
  9747. Munch:
  9748. ; incbin "ab3:sounds/munch"
  9749. EndMunch:
  9750. PooGun:
  9751. ; incbin "ab3:sounds/shoot.dm"
  9752. EndPooGun:
  9753. Collect:
  9754. ; incbin "ab3:sounds/collect"
  9755. EndCollect:
  9756. DoorNoise:
  9757. ; incbin "ab3:sounds/newdoor"
  9758. EndDoorNoise:
  9759. Stomp:
  9760. ; incbin "ab3:sounds/footstep3"
  9761. EndStomp:
  9762. SwitchNoise:
  9763. ; incbin "ab3:sounds/switch"
  9764. EndSwitch:
  9765. Reload:
  9766. ; incbin "ab3:sounds/switch1.SFX"
  9767. EndReload:
  9768.  
  9769. CHEATFRAME:
  9770.  dc.b 26,20,33,27,17,12
  9771. ENDCHEAT:
  9772.  
  9773. NoAmmo:
  9774. ; incbin "ab3:sounds/noammo"
  9775. EndNoAmmo:
  9776. Splotch:
  9777. ; incbin "ab3:sounds/splotch"
  9778. EndSplotch:
  9779. SplatPop:
  9780. ; incbin "ab3:sounds/splatpop"
  9781. EndSplatPop:
  9782. Boom:
  9783. ; incbin "ab3:sounds/boom"
  9784. EndBoom:
  9785. Hiss:
  9786. ; incbin "ab3:sounds/newhiss"
  9787. EndHiss:
  9788. Howl1:
  9789. ; incbin "ab3:sounds/howl1"
  9790. EndHowl1:
  9791. Howl2:
  9792. ; incbin "ab3:sounds/howl2"
  9793. EndHowl2:
  9794. Pant:
  9795. ; incbin "ab3:sounds/pant"
  9796. EndPant:
  9797. Whoosh:
  9798. ; incbin "ab3:sounds/whoosh"
  9799. EndWhoosh:
  9800. ROAR:
  9801. ; incbin "ab3:sounds/bigscream"
  9802. EndROAR
  9803. whoosh:
  9804. ; incbin "ab3:sounds/flame"
  9805. Endwhoosh:
  9806.  SECTION music,code_c
  9807.  
  9808. UseAllChannels: dc.w 0
  9809.  
  9810. mt_init:move.l    mt_data,a0
  9811.     move.l    a0,a1
  9812.     add.l    #$3b8,a1
  9813.     moveq    #$7f,d0
  9814.     moveq    #0,d1
  9815. mt_loop:move.l    d1,d2
  9816.     subq.w    #1,d0
  9817. mt_lop2:move.b    (a1)+,d1
  9818.     cmp.b    d2,d1
  9819.     bgt.s    mt_loop
  9820.     dbf    d0,mt_lop2
  9821.     addq.b    #1,d2
  9822.  
  9823.     lea    mt_samplestarts(pc),a1
  9824.     asl.l    #8,d2
  9825.     asl.l    #2,d2
  9826.     add.l    #$43c,d2
  9827.     add.l    a0,d2
  9828.     move.l    d2,a2
  9829.     moveq    #$1e,d0
  9830. mt_lop3:clr.l    (a2)
  9831.     move.l    a2,(a1)+
  9832.     moveq    #0,d1
  9833.     move.w    42(a0),d1
  9834.     asl.l    #1,d1
  9835.     add.l    d1,a2
  9836.     add.l    #$1e,a0
  9837.     dbf    d0,mt_lop3
  9838.  
  9839.     or.b    #$2,$bfe001
  9840.     move.b    #$6,mt_speed
  9841.     clr.w    $dff0a8
  9842.     clr.w    $dff0b8
  9843.     clr.w    $dff0c8
  9844.     clr.w    $dff0d8
  9845.     clr.b    mt_songpos
  9846.     clr.b    mt_counter
  9847.     clr.w    mt_pattpos
  9848.     rts
  9849.  
  9850. mt_end:    clr.w    $dff0a8
  9851.     clr.w    $dff0b8
  9852.     clr.w    $dff0c8
  9853.     clr.w    $dff0d8
  9854.     move.w    #$f,$dff096
  9855.     rts
  9856.  
  9857. mt_music:
  9858.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9859.     move.l    mt_data,a0
  9860.     addq.b    #$1,mt_counter
  9861.     move.b    mt_counter,D0
  9862.     cmp.b    mt_speed,D0
  9863.     blt.s    mt_nonew
  9864.     clr.b    mt_counter
  9865.     bra    mt_getnew
  9866.  
  9867. mt_nonew:
  9868.     lea    mt_voice1(pc),a6
  9869.     lea    $dff0a0,a5
  9870.     bsr    mt_checkcom
  9871.     lea    mt_voice2(pc),a6
  9872.     lea    $dff0b0,a5
  9873.     bsr    mt_checkcom
  9874.     tst.b UseAllChannels
  9875.     beq mt_endr
  9876.      lea    mt_voice3(pc),a6
  9877.     lea    $dff0c0,a5
  9878.     bsr    mt_checkcom
  9879.     lea    mt_voice4(pc),a6
  9880.     lea    $dff0d0,a5
  9881.     bsr    mt_checkcom
  9882.     bra    mt_endr
  9883.  
  9884. mt_arpeggio:
  9885.     moveq    #0,d0
  9886.     move.b    mt_counter,d0
  9887.     divs    #$3,d0
  9888.     swap    d0
  9889.     cmp.w    #$0,d0
  9890.     beq.s    mt_arp2
  9891.     cmp.w    #$2,d0
  9892.     beq.s    mt_arp1
  9893.  
  9894.     moveq    #0,d0
  9895.     move.b    $3(a6),d0
  9896.     lsr.b    #4,d0
  9897.     bra.s    mt_arp3
  9898. mt_arp1:moveq    #0,d0
  9899.     move.b    $3(a6),d0
  9900.     and.b    #$f,d0
  9901.     bra.s    mt_arp3
  9902. mt_arp2:move.w    $10(a6),d2
  9903.     bra.s    mt_arp4
  9904. mt_arp3:asl.w    #1,d0
  9905.     moveq    #0,d1
  9906.     move.w    $10(a6),d1
  9907.     lea    mt_periods(pc),a0
  9908.     moveq    #$24,d7
  9909. mt_arploop:
  9910.     move.w    (a0,d0.w),d2
  9911.     cmp.w    (a0),d1
  9912.     bge.s    mt_arp4
  9913.     addq.l    #2,a0
  9914.     dbf    d7,mt_arploop
  9915.     rts
  9916. mt_arp4:move.w    d2,$6(a5)
  9917.     rts
  9918.  
  9919. mt_getnew:
  9920.     move.l    mt_data,a0
  9921.     move.l    a0,a3
  9922.     move.l    a0,a2
  9923.     add.l    #$c,a3
  9924.     add.l    #$3b8,a2
  9925.     add.l    #$43c,a0
  9926.  
  9927.     moveq    #0,d0
  9928.     move.l    d0,d1
  9929.     move.b    mt_songpos,d0
  9930.     move.b    (a2,d0.w),d1
  9931.     asl.l    #8,d1
  9932.     asl.l    #2,d1
  9933.     add.w    mt_pattpos,d1
  9934.     clr.w    mt_dmacon
  9935.  
  9936.     lea    $dff0a0,a5
  9937.     lea    mt_voice1(pc),a6
  9938.     bsr    mt_playvoice
  9939.     lea    $dff0b0,a5
  9940.     lea    mt_voice2(pc),a6
  9941.     bsr    mt_playvoice
  9942.     tst.b UseAllChannels
  9943.     beq mt_setdma
  9944.     lea    $dff0c0,a5
  9945.     lea    mt_voice3(pc),a6
  9946.     bsr    mt_playvoice
  9947.     lea    $dff0d0,a5
  9948.     lea    mt_voice4(pc),a6
  9949.     bsr    mt_playvoice
  9950.     bra    mt_setdma
  9951.  
  9952. PROTCALC:
  9953. ;    include "ab3:source/protcalc.s"
  9954.     incbin "ab3:includes/protcalc.bin"
  9955. ENDPROTCALC:
  9956.  
  9957. mt_playvoice:
  9958.     move.l    (a0,d1.l),(a6)
  9959.     addq.l    #4,d1
  9960.     moveq    #0,d2
  9961.     move.b    $2(a6),d2
  9962.     and.b    #$f0,d2
  9963.     lsr.b    #4,d2
  9964.     move.b    (a6),d0
  9965.     and.b    #$f0,d0
  9966.     or.b    d0,d2
  9967.     tst.b    d2
  9968.     beq.s    mt_setregs
  9969.     moveq    #0,d3
  9970.     lea    mt_samplestarts(pc),a1
  9971.     move.l    d2,d4
  9972.     subq.l    #$1,d2
  9973.     asl.l    #2,d2
  9974.     mulu    #$1e,d4
  9975.     move.l    (a1,d2.l),$4(a6)
  9976.     move.w    (a3,d4.l),$8(a6)
  9977.     move.w    $2(a3,d4.l),$12(a6)
  9978.     move.w    $4(a3,d4.l),d3
  9979.     tst.w    d3
  9980.     beq.s    mt_noloop
  9981.     move.l    $4(a6),d2
  9982.     asl.w    #1,d3
  9983.     add.l    d3,d2
  9984.     move.l    d2,$a(a6)
  9985.     move.w    $4(a3,d4.l),d0
  9986.     add.w    $6(a3,d4.l),d0
  9987.     move.w    d0,8(a6)
  9988.     move.w    $6(a3,d4.l),$e(a6)
  9989.     move.w    $12(a6),d0
  9990.     asr.w #2,d0
  9991.     move.w d0,$8(a5)
  9992.     bra.s    mt_setregs
  9993. mt_noloop:
  9994.     move.l    $4(a6),d2
  9995.     add.l    d3,d2
  9996.     move.l    d2,$a(a6)
  9997.     move.w    $6(a3,d4.l),$e(a6)
  9998.     move.w    $12(a6),d0
  9999.     asr.w #2,d0
  10000.     move.w d0,$8(a5)
  10001. mt_setregs:
  10002.     move.w    (a6),d0
  10003.     and.w    #$fff,d0
  10004.     beq    mt_checkcom2
  10005.     move.b    $2(a6),d0
  10006.     and.b    #$F,d0
  10007.     cmp.b    #$3,d0
  10008.     bne.s    mt_setperiod
  10009.     bsr    mt_setmyport
  10010.     bra    mt_checkcom2
  10011. mt_setperiod:
  10012.     move.w    (a6),$10(a6)
  10013.     and.w    #$fff,$10(a6)
  10014.     move.w    $14(a6),d0
  10015.     move.w    d0,$dff096
  10016.     clr.b    $1b(a6)
  10017.  
  10018.     move.l    $4(a6),(a5)
  10019.     move.w    $8(a6),$4(a5)
  10020.     move.w    $10(a6),d0
  10021.     and.w    #$fff,d0
  10022.     move.w    d0,$6(a5)
  10023.     move.w    $14(a6),d0
  10024.     or.w    d0,mt_dmacon
  10025.     bra    mt_checkcom2
  10026.  
  10027. mt_setdma:
  10028.      move.w #250,d0
  10029. mt_wait:
  10030.      add.w #1,testchip
  10031.      dbra d0,mt_wait
  10032.     move.w    mt_dmacon,d0
  10033.     or.w    #$8000,d0
  10034.     and.w #%1111111111110011,d0
  10035.     move.w    d0,$dff096
  10036.     move.w #250,d0
  10037. mt_wait2:
  10038.     add.w #1,testchip
  10039.     dbra    d0,mt_wait2
  10040.     lea    $dff000,a5
  10041.     tst.b UseAllChannels
  10042.     beq.s noall
  10043.     lea    mt_voice4(pc),a6
  10044.     move.l    $a(a6),$d0(a5)
  10045.     move.w    $e(a6),$d4(a5)
  10046.     lea    mt_voice3(pc),a6
  10047.     move.l    $a(a6),$c0(a5)
  10048.     move.w    $e(a6),$c4(a5)
  10049. noall:
  10050.     lea    mt_voice2(pc),a6
  10051.     move.l    $a(a6),$b0(a5)
  10052.     move.w    $e(a6),$b4(a5)
  10053.     lea    mt_voice1(pc),a6
  10054.     move.l    $a(a6),$a0(a5)
  10055.     move.w    $e(a6),$a4(a5)
  10056.  
  10057.     add.w    #$10,mt_pattpos
  10058.     cmp.w    #$400,mt_pattpos
  10059.     bne.s    mt_endr
  10060. mt_nex:    clr.w    mt_pattpos
  10061.     clr.b    mt_break
  10062.     addq.b    #1,mt_songpos
  10063.     and.b    #$7f,mt_songpos
  10064.     move.b    mt_songpos,d1
  10065. ;    cmp.b    mt_data+$3b6,d1
  10066. ;    bne.s    mt_endr
  10067. ;    move.b    mt_data+$3b7,mt_songpos
  10068. mt_endr:tst.b    mt_break
  10069.     bne.s    mt_nex
  10070.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  10071.     rts
  10072.  
  10073. mt_setmyport:
  10074.     move.w    (a6),d2
  10075.     and.w    #$fff,d2
  10076.     move.w    d2,$18(a6)
  10077.     move.w    $10(a6),d0
  10078.     clr.b    $16(a6)
  10079.     cmp.w    d0,d2
  10080.     beq.s    mt_clrport
  10081.     bge.s    mt_rt
  10082.     move.b    #$1,$16(a6)
  10083.     rts
  10084. mt_clrport:
  10085.     clr.w    $18(a6)
  10086. mt_rt:    rts
  10087.  
  10088. CODESTORE: dc.l 0
  10089.  
  10090. mt_myport:
  10091.     move.b    $3(a6),d0
  10092.     beq.s    mt_myslide
  10093.     move.b    d0,$17(a6)
  10094.     clr.b    $3(a6)
  10095. mt_myslide:
  10096.     tst.w    $18(a6)
  10097.     beq.s    mt_rt
  10098.     moveq    #0,d0
  10099.     move.b    $17(a6),d0
  10100.     tst.b    $16(a6)
  10101.     bne.s    mt_mysub
  10102.     add.w    d0,$10(a6)
  10103.     move.w    $18(a6),d0
  10104.     cmp.w    $10(a6),d0
  10105.     bgt.s    mt_myok
  10106.     move.w    $18(a6),$10(a6)
  10107.     clr.w    $18(a6)
  10108. mt_myok:move.w    $10(a6),$6(a5)
  10109.     rts
  10110. mt_mysub:
  10111.     sub.w    d0,$10(a6)
  10112.     move.w    $18(a6),d0
  10113.     cmp.w    $10(a6),d0
  10114.     blt.s    mt_myok
  10115.     move.w    $18(a6),$10(a6)
  10116.     clr.w    $18(a6)
  10117.     move.w    $10(a6),$6(a5)
  10118.     rts
  10119.  
  10120. mt_vib:    move.b    $3(a6),d0
  10121.     beq.s    mt_vi
  10122.     move.b    d0,$1a(a6)
  10123.  
  10124. mt_vi:    move.b    $1b(a6),d0
  10125.     lea    mt_sin(pc),a4
  10126.     lsr.w    #$2,d0
  10127.     and.w    #$1f,d0
  10128.     moveq    #0,d2
  10129.     move.b    (a4,d0.w),d2
  10130.     move.b    $1a(a6),d0
  10131.     and.w    #$f,d0
  10132.     mulu    d0,d2
  10133.     lsr.w    #$6,d2
  10134.     move.w    $10(a6),d0
  10135.     tst.b    $1b(a6)
  10136.     bmi.s    mt_vibmin
  10137.     add.w    d2,d0
  10138.     bra.s    mt_vib2
  10139. mt_vibmin:
  10140.     sub.w    d2,d0
  10141. mt_vib2:move.w    d0,$6(a5)
  10142.     move.b    $1a(a6),d0
  10143.     lsr.w    #$2,d0
  10144.     and.w    #$3c,d0
  10145.     add.b    d0,$1b(a6)
  10146.     rts
  10147.  
  10148. mt_nop:    move.w    $10(a6),$6(a5)
  10149.     rts
  10150.  
  10151.  
  10152. mt_checkcom:
  10153.     move.w    $2(a6),d0
  10154.     and.w    #$fff,d0
  10155.     beq.s    mt_nop
  10156.     move.b    $2(a6),d0
  10157.     and.b    #$f,d0
  10158.     tst.b    d0
  10159.     beq    mt_arpeggio
  10160.     cmp.b    #$1,d0
  10161.     beq.s    mt_portup
  10162.     cmp.b    #$2,d0
  10163.     beq    mt_portdown
  10164.     cmp.b    #$3,d0
  10165.     beq    mt_myport
  10166.     cmp.b    #$4,d0
  10167.     beq    mt_vib
  10168.     move.w    $10(a6),$6(a5)
  10169.     cmp.b    #$a,d0
  10170.     beq.s    mt_volslide
  10171.     rts
  10172.  
  10173. mt_volslide:
  10174.     moveq    #0,d0
  10175.     move.b    $3(a6),d0
  10176.     lsr.b    #4,d0
  10177.     tst.b    d0
  10178.     beq.s    mt_voldown
  10179.     add.w    d0,$12(a6)
  10180.     cmp.w    #$40,$12(a6)
  10181.     bmi.s    mt_vol2
  10182.     move.w    #$40,$12(a6)
  10183. mt_vol2:move.w    $12(a6),d0
  10184.     asr.w #2,d0
  10185.     move.w d0,$8(a5)
  10186.     rts
  10187.  
  10188. mt_voldown:
  10189.     moveq    #0,d0
  10190.     move.b    $3(a6),d0
  10191.     and.b    #$f,d0
  10192.     sub.w    d0,$12(a6)
  10193.     bpl.s    mt_vol3
  10194.     clr.w    $12(a6)
  10195. mt_vol3:move.w    $12(a6),d0
  10196.     asr.w #2,d0
  10197.     move.w d0,$8(a5)
  10198.     rts
  10199.  
  10200. mt_portup:
  10201.     moveq    #0,d0
  10202.     move.b    $3(a6),d0
  10203.     sub.w    d0,$10(a6)
  10204.     move.w    $10(a6),d0
  10205.     and.w    #$fff,d0
  10206.     cmp.w    #$71,d0
  10207.     bpl.s    mt_por2
  10208.     and.w    #$f000,$10(a6)
  10209.     or.w    #$71,$10(a6)
  10210. mt_por2:move.w    $10(a6),d0
  10211.     and.w    #$fff,d0
  10212.     move.w    d0,$6(a5)
  10213.     rts
  10214.  
  10215. mt_portdown:
  10216.     clr.w    d0
  10217.     move.b    $3(a6),d0
  10218.     add.w    d0,$10(a6)
  10219.     move.w    $10(a6),d0
  10220.     and.w    #$fff,d0
  10221.     cmp.w    #$358,d0
  10222.     bmi.s    mt_por3
  10223.     and.w    #$f000,$10(a6)
  10224.     or.w    #$358,$10(a6)
  10225. mt_por3:move.w    $10(a6),d0
  10226.     and.w    #$fff,d0
  10227.     move.w    d0,$6(a5)
  10228.     rts
  10229.  
  10230. mt_checkcom2:
  10231.     move.b    $2(a6),d0
  10232.     and.b    #$f,d0
  10233.     cmp.b    #$e,d0
  10234.     beq.s    mt_setfilt
  10235.     cmp.b    #$d,d0
  10236.     beq.s    mt_pattbreak
  10237.     cmp.b    #$b,d0
  10238.     beq.s    mt_posjmp
  10239.     cmp.b    #$c,d0
  10240.     beq.s    mt_setvol
  10241.     cmp.b    #$f,d0
  10242.     beq.s    mt_setspeed
  10243.     rts
  10244.  
  10245. mt_setfilt:
  10246.     move.b    $3(a6),d0
  10247.     and.b    #$1,d0
  10248.     asl.b    #$1,d0
  10249.     and.b    #$fd,$bfe001
  10250.     or.b    d0,$bfe001
  10251.     rts
  10252. mt_pattbreak:
  10253.     not.b    mt_break
  10254.     rts
  10255. mt_posjmp:
  10256.     st reachedend
  10257.     move.b    $3(a6),d0
  10258.     subq.b    #$1,d0
  10259.     move.b    d0,mt_songpos
  10260.     not.b    mt_break
  10261.     rts
  10262. mt_setvol:
  10263.     cmp.b    #$40,$3(a6)
  10264.     ble.s    mt_vol4
  10265.     move.b    #$40,$3(a6)
  10266. mt_vol4:move.b    $3(a6),d0
  10267.     asr.w #2,d0
  10268.     move.w d0,$8(a5)
  10269.     rts
  10270. mt_setspeed:
  10271.     cmp.b    #$1f,$3(a6)
  10272.     ble.s    mt_sets
  10273.     move.b    #$1f,$3(a6)
  10274. mt_sets:move.b    $3(a6),d0
  10275.     beq.s    mt_rts2
  10276.     move.b    d0,mt_speed
  10277.     clr.b    mt_counter
  10278. mt_rts2:rts
  10279.  
  10280. mt_sin:
  10281.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10282.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10283.  
  10284. mt_periods:
  10285.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10286.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10287.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10288.  DC.w $007f,$0078,$0071,$0000,$0000
  10289.  
  10290. reachedend: dc.b 0
  10291. mt_speed:    DC.b    6
  10292. mt_songpos:    DC.b    0
  10293. mt_pattpos:    DC.w    0
  10294. mt_counter:    DC.b    0
  10295.  
  10296. mt_break:    DC.b    0
  10297. mt_dmacon:    DC.w    0
  10298. mt_samplestarts:DS.L    $1f
  10299. mt_voice1:    DS.w    10
  10300.         DC.w    1
  10301.         DS.w    3
  10302. mt_voice2:    DS.w    10
  10303.         DC.w    2
  10304.         DS.w    3
  10305. mt_voice3:    DS.w    10
  10306.         DC.w    4
  10307.         DS.w    3
  10308. mt_voice4:    DS.w    10
  10309.         DC.w    8
  10310.         DS.w    3
  10311.  
  10312. CHEATPTR: dc.l 0
  10313. CHEATNUM: dc.l 0
  10314.  
  10315. testchip: dc.w 0
  10316.  
  10317. ;/* End of File */
  10318. mt_data: dc.l 0
  10319. tstchip: dc.l 0
  10320.  include "SERIAL_NIGHTMARE"
  10321.  
  10322. ingame:
  10323. ; incbin "ab3:includes/ingame"
  10324. gameover: incbin "ab3:includes/gameover"
  10325. welldone: incbin "ab3:includes/welldone"
  10326.